
Guerrilla War is the 1988 NES port by SNK of their arcade run-and-gun title. Superficially it has a lot of similarities with their other overhead run-and-gun titles like the Ikari Warriors franchise. Interestingly the original game, Guevara (“ゲバラ”), follows the path of Che Guevara and Fidel Castro liberating Batista’s Cuba. The text of this plotline was naturally removed in North American localization in Reagan’s America, but otherwise the map and plot was the same.

This is my first NES ROM hack, a graphic and text hack restoring the original plot in the English version. I replaced the pixel art image of the Cuban revolutionary with a digitized photo as well as changing the text. I restored the player names to GUEVARA and CASTRO as in the original. I also replaced the in-game font with one that is more military looking. This also included a full overhaul of the title screen with a chibi anime Che Guevara I designed.

I wanted to add a couple actual game mechanic hacks, specifically the ability to keep the player’s score and weapon after death, but that proved much more complicated than initially. Tracking down where the score and weapon are stored in the RAM was the easy part (see notes below). Interrupting the routine after death that initializes the weapon (and the score after continue) is much more problematic because the address for the flag is reused for multiple functions in the overall game program. In the notes below there is a superficial Game Genie code that allows the player to keep the weapon after death, but it leads to many undesired effects elsewhere in the game code. In the end it didn’t seem like a good hack with so much potential instability. The IPS patch for the graphics hack is below:
(This is not a game ROM, which I do not have the right to distribute. This is an IPS patch (created from Guerrilla War (USA).nes) which entirely contains code and data I created. My preferred IPS patcher is Lunar IPS.)
HACK NOTES:
The 8×16 font is treated as metatiles and the text using it in the ROM is stored in plaintext ASCII.
RAM ADDRESSES:
Player 1 Lives: 0x0028
Player 2 Lives: 0x0029
Next Stage: 0x0039
Player 1 Score: 0x0190, 0x0191, 0x0192
Player 2 Score: 0x0193, 0x0194, 0x0195
High Score: 0x0196, 0x0197, 0x0198
Timer For Tank: 0x04C2
Player 1 Weapon: 0x0600
Player 2 Weapon: 0x0601
WEAPONS:
000 – Normal Gun/Normal Bombs
001 – Spread Gun/Normal Bomb
002 – Laser+Spread Gun/Normal Bomb
003 – Flamethrower Gun/Normal Bomb
004 – Laser Gun/Normal Bomb
024 – Normal Bomb/Powered Bomb
025 – Powered Bomb/Powered Bomb
026 – Destruction Bomb/Powered Bomb
028 – Rescue Whip/Powered Bomb
032 – Normal Gun/Destruction Bomb
033 – Spread Gun/Destruction Bomb
034 – Laser+Spread Gun/Destruction Bomb
035 – Flamethrower Gun/Destruction Bomb
036 – Laser Gun/Destruction Bomb
073 – Powered Bomb/Rescue Whip
074 – Destruction Bomb/Rescue Whip
076 – Rescue Whip/Rescue Whip
GAME GENIE CODES:
SXUTEUSO – Keep Weapon After Death. Replaces the ASM opcode at line 0xEBB0 (the death flag routine mentioned above) which is originally set at $9D (STA: Store Accumulator) with $AD (LDA: Load Accumulator). Essentially it replaces the code that changes the weapon variable with a different command that dumps the zero value into the accumulator (a set aside register of RAM addresses where intermediate values used in arithmetic routines wind up; a sort of junk drawer in the RAM). This also affects several animation timers in the game, leading to softlocks and ghost animations.
AYSVOGEI – One Hit Kills (including bosses). Sets address 0xEC59 to 70. Can be changed to EASVOGEI, which causes bosses to have significantly reduced hit points, taking two to five hits instead of just one.