News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: SNES Doom Cheats  (Read 1048 times)

Pr3tty F1y

  • Newbie
  • *
  • Posts: 3
    • View Profile
SNES Doom Cheats
« on: October 23, 2019, 04:09:02 pm »
This isn't going to be a traditional hack, per se, as I'm not really a fan of those "all this IPS does is apply game genie codes to your rom" hacks.

However, I want to start off by professing my love of SNES Doom. It is not a great version of Doom, but I don't believe that makes it a bad game. At the time of it's release, I did not have a PC capable of playing Doom. The SNES was the only way I was able to get my hands on Doom at the time and, not knowing about how Doom played on more powerful machines, SNES Doom was an amazing experience for me as there is nothing else that matches it on the SNES.

Of course, SNES Doom sucks if you're used to playing Doom on a PC because if you try to play SNES Doom as if you were playing on the PC, you will become immediately frustrated. The graphics are grainy and pixelated. There's a slight delay to the sound effects (particularly when firing). The walls behave like they're made of honey and you get stuck up against them. And then there is the framerate which is barely playable at best.

However, I think the soundtrack for SNES Doom exceeds the vast majority of PC sound card MIDI of the time and, at least as far as ports, minus the ceiling/floor textures (which I never really missed), the texturing and geometry better match the PC original than pretty much any other ports sans modern "ports" which pretty much are just the PC release repackaged.

So with all of that said, SNES Doom is a tough son of a bitch because you can't just flick your wrist with a mouse and turn around. It's definitely still Doom, but to appreciate it you need to play it more as a game of memorization and strategy than just a FPS. Many games rely on memorization of enemy patterns and repeatedly practicing precision (e.g., shumps), but I would argue that approaching SNES Doom the same way makes it a better game to appreciate. You can't turn around quick or fire quickly. However, if you know where enemies are located and you go in to each area/room with a plan it is definitely a significantly more enjoyable experience rather than just expecting to play like PC Doom (i.e., for those of you who are not picking up on my SNES Doom apologist slant - I mean fast or at least reasonably quick :P).

Anyway, with that out of the way, SNES Doom is difficult due to it's design limitation and those limitations definitely make the game harder than the original. One of the things that always disappointed me about SNES Doom was the lack of cheats as practically every other version of Doom had cheats and, in my opinion, cheats would enhance SNES Doom by allowing you to focus on the amazing technical achievement of the port and exploring the environments rather than strategically planning how you will get from one area to the next given the general sluggishness of controls and framerate.

There have been a handful of Game Genie codes for SNES Doom out there for years, but I have found them to generally suck. For example, with the "Infinite Health" code out there, your health jumps around every time you move, which means it may drop really low just before you're attacked and you'll still die. Then again, you may pick up a med kit and it will also kill you. Definitely not a game enhancing code.

That's why I've done a little bit of work that I wanted to share with the community for any other SNES Doom lovers as I can't find any similar codes out there.

I've come up with two sets of PAR codes using BSNES v0.112 and Cheat Engine that, in my testing, provide infinite ammo for all weapons (provided you picked up the weapon already) and true infinite health:

INFINITE AMMO
00605c5e
00605d00
00605eff

INFINITE HEALTH
705aaeff
715aaeff
7e0700ff

One weird quirk is that they seem to operate best if they are on from the beginning (i.e., already selected and enabled so that they are automatically applied when the rom is loaded). If they're not on immediately, I found turning them off then back on can fix them. I also entered them in ZSNES as a test and they work there too.

I don't have an original copy of SNES Doom, a PAR, or even a physical SNES, but I would be interested to hear from anyone if these codes work there too.

Now (as described above), it's obvious that my "hacking" ability is quite limited, but I'm going to continue to plug along as I have time to try to tackle codes to give you weapons without the need to pick up and maybe the ability to select your starting episode/mission. I'm not sure if I'll have any luck, but if I find anything useful, I'll share it here.

Psyklax

  • Hero Member
  • *****
  • Posts: 1076
    • View Profile
    • Psyklax Translations
Re: SNES Doom Cheats
« Reply #1 on: October 24, 2019, 03:27:28 am »
So, in short... you want cheats for SNES Doom. Okay. :)

PAR codes are all well and good, but they're not really hacking: all the PAR does is replace a RAM value with another one. The Game Genie goes into the ROM and changes the game code itself.

Having said that, I also didn't understand why the "infinite health" code doesn't give you infinite health. Sounds like someone really didn't understand assembly, and nobody corrected them (though I could be wrong, as I haven't looked inside the code myself).

If I have a chance later today, I'll do a bit of hacking and see if I can make a true infinite health cheat, and maybe some other cheats you might suggest. :)

EDIT: Right, I've made some progress, but I might need some help.

The game keeps your current health in cartridge SRAM, and transfers it every frame to the SNES RAM.

It starts at $5AAE in cartridge RAM, and changing that in bsnes will change your health (the same happens to your ammo when changing $5E in SRAM). It's loaded into $1D2, also on cartridge RAM, and it, along with your other stats, is then loaded into regular RAM. It goes from $1D0 (SRAM) to $6FE (work RAM). It uses the register $2181, which I can't see documentation for but is presumably a special register to do a DMA from SRAM rather than regular RAM.

Problem I have is: how does $1D2 get updated with what's at $5AAE? I can't make a breakpoint because it's cartridge RAM, and therefore there's no bus to deal with it. I've tried reading a trace log but nothing sticks out. What I want to do, obviously, is find the instruction that loads your new health into $5AAE, and NOP it, but I just don't see it. I'm sure that somewhere, there HAS to be an instruction to change $5AAE in SRAM to your new health after being shot, but I'm stuck. Frustrating.
« Last Edit: October 25, 2019, 04:31:10 am by Psyklax »

Pr3tty F1y

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: SNES Doom Cheats
« Reply #2 on: December 14, 2019, 11:22:45 am »
Well, I've done a little more work and, with the guidance of Kawa-oneechan on BSNES' GIT hub, I've made some progress.

One thing of note - apparently firing the rocket launcher at close range does more than 255 damage. Therefore, instead of rerunning my single byte searches for player health, I just expanded them to two bytes and set player health at 999.

I also was able to find the memory address in the on-cart SRAM (SNES Doom's Super FX chip runs 64kb on cart in addition to what's in the SNES) that stores your current weapons.

Therefore, we now have this:


So here are my revised codes:

[Infinite Ammo (All Guns)]
00605c=5e
00605d=00
00605e=ff

[Infinite Health]
705aae=e7
705aaf=03
715aae=e7
715aaf=03
7e0700=e7
7e0701=03

[Have all weapons]
7001d9=ff

I need to do some more testing to verify that all of the codes for health/weapons are needed. It seems that some of the memory addresses control the HUD display and some are controlling the actual behind the scenes values. Being that these behind the scenes values should be controlling the HUD, some of the listed codes for health/ammo may be redundant. I'll post my findings here.

Also - Psyklax - thank you very much for your response and my apologies for the delayed response. I don't have as much time to tinker these days as I used to. And you're also quite correct re: PAR being RAM patches vs. actual patching/"hacking" the ROM with Game Genie codes. The best my skill level allows at the moment is searching for addresses in RAM, but I still wanted to share these as these codes are still far superior to what was historically available.

eskayelle

  • Jr. Member
  • **
  • Posts: 93
    • View Profile
Re: SNES Doom Cheats
« Reply #3 on: December 14, 2019, 12:46:42 pm »
Hey, Pr3tty F1y.  Awesome work so far!  I think your next tests will indicate you can reduce the codes as follows:

[Infinite Ammo (All Guns)]
00605c=5e
00605e=ff

[Infinite Health]
705aae=e7
705aaf=03

[Have all weapons]
7001d9=ff

I only did some quick testing, but you may find the same results.

Looking forward to your next set of results!  I loved DOOM for SNES, but man, I needed cheat codes!!!

Pr3tty F1y

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: SNES Doom Cheats
« Reply #4 on: December 14, 2019, 03:11:29 pm »
@eskayalle - It warms the cockles of my heart to find another person who likes SNES Doom  :D

Thank you for consolidating my codes. I haven't had a chance to try them yet, but I'm sure they'll work fine.

I haven't been able to do a lot of testing on this code, but I believe the following should give you all keys:

[All Keys]
7001d8=ff

Also given that it's only one byte off of the All Weapons code, this is probably a sweet spot for storing HUD related data. There may even be better Infinite Ammo/Infinite Health codes there as the original codes that I posted above were targeting SNES memory (as most SNES emulators like BSNES, MAME, ZSNES, etc. don't search cartridge ram). However, SNES9x does search cartridge ram, but it was giving me the wrong addresses (they were starting at x800000 instead of x700000 - but thanks to BSNES' manifest view, it was helpful in making an educated guess to the right address.

December 14, 2019, 07:17:28 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Well, although there are no known cheats built into SNES Doom, the "God Mode" IDDQD face sprite does exist in the system and can be turned on (although all this code does is turn on the sprite, not actual god mode):

[God Mode Face]
7001d6=02



Altering the byte by even #'s (from 00 thru 3e) goes through all head sprites available.

Additional Edit: It seems a few other bytes near these do control the HUD display of your health, ammo, and armor. However, they seem to be controlling the HUD display only (at least for health and ammo, but presumably for armor as well but I have tried a controlled test for armor yet). So while they can lock the display numerals as whatever value you assign, you still only have whatever ammo/health/armor you have picked up behind the scenes (and so you can still die and run out of ammo).

So, to me, that would mean your actual health and ammo (and presumably armor) are controlled within the SNES' own memory while the cart ram for the Super FX chip seem to control keys, weapons, and Doom guy face sprite but only the *display* of the health/ammo/presumably armor numerals. That would also account for the fact that you see a brief drop in your health/ammo before they recover to full (i.e., 255/999, respectively, with these codes - due to both the SNES ram and Super FX cart ram coordinating data).

December 15, 2019, 11:37:31 am - (Auto Merged - Double Posts are not allowed before 7 days.)
And another edit: Thanks to a French gentleman named TheRetroMike, there is a No Clipping code for SNES Doom that has been found but apparently is not widely known:

[No Clipping]
00a0f3=03

The no clipping applies to the player as well all sprites (e.g., enemies and projectiles). However, sprites still are solid to one another, so basically the level geometry is able to be clipped through.

I've had this freeze the game (when in auto-map mode in the hidden E1M4 stage). I'm not sure why it crashed - perhaps it caused the game to exceed available memory. Just wanted to share that here as well.

December 16, 2019, 08:52:15 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
I had a few more minutes to tinker tonight.

Setting 7001e8=01 automatically finishes the current level (after doing some checking, the game seems to set this to 0B for getting to the normal exit of a level).

If the level has a hidden exit (E1M3, E2M2, E3M5) a value of 33 (hex) will activate the hidden exit. Setting the value to 33 on a level that does not have a hidden level, takes you to Warrens (E3M8 in SNES Doom) - the final hidden level of the game.

The default value is 7001e8=00.

December 17, 2019, 10:37:59 am - (Auto Merged - Double Posts are not allowed before 7 days.)
The following address set with a value of 10 (hex) or more will set you as "invisible" to enemies (i.e., the invisibility orb). Any value > 0 will set the status, but only values > 10 will make your weapon sprite translucent:

[Invisibility]
7001EA=10

Edit: It seems that this address as well as 7001EB are a countdown time for the invisibility. The countdown speed is quick for 7001EA and as it drops from FF to 00, 7001EB then drops down by one increment for every "cycle" of 7001EA.

December 17, 2019, 08:11:24 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
The following two addresses control player default speed. The default value from the game is 04. A value of 00 prevents you from moving at all:

7001EE=04
7001EF=00

An interesting side effect (by really ramping up the speed using the 2nd address) is that Doom guy's face gets faster with higher values. Keep 7001EE=04 and setting 7001EF=01 makes him quite twitchy :o

December 19, 2019, 06:03:29 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Similar to the Invisibility, Invulnerability is controlled by two bytes used as a countdown timer

700041=11 will provide the player with invulnerability (although, interestingly, setting this address does NOT change the face sprite to the 'god mode' head sprite.
« Last Edit: December 19, 2019, 06:06:59 pm by Pr3tty F1y »