Under the Microscope: Shin Megami Tensei: Devil Summoner

In this edition:

  • There’s a hidden debug mode in Shin Megami Tensei: Devil Summoner, but it’s disabled in the retail version of the game.
  • I’ve made a patch to re-enable it — get it from SegaXtreme.

Debug mode

What is Devil Summoner, a single player game based on the Megami Tensei franchise, doing listening for input on controller 2? That’s what I wondered when I was labeling the variables in this bit of decompiled code:


if (((p2_held_060ef982 & 0x0008) == 0) || ((p2_held_060ef982 & 0x0080) == 0)) {
    if (((p2_held_060ef982 & 0x0800) == 0) && (flag_00201038 != 0)) {
        if ((p2_pressed_060ef984 & 0x4000) == 0) {
            flag_00201038 = 1;
            */ ... */
        }

Breaking that down, this code is checking controller to see:

  • Whether L (bit pattern 0x0008) or R (0x0080) is being held down.
  • If Start (0x0800) isn’t being held down.
  • If Left (0x4000) is being pressed.

If those conditions hold, the flag_00201038 variable gets set. What’s that do? It brings up the Coordinate Display panel that’s described in the TCRF article for this game.

Coordinate Display enabled.

The code above only executes if the value at memory address 0020000c is nonzero. That isn’t the case normally — this code that executes when you’re on the main menu screen forces it to zero every frame:

do {
    enable_p2_controls_0020000c = 0;
    menu_input = get_main_menu_input_060288b0();
    /* ... */
} while (true)

There don’t seem to be any cheat codes or other tricks for changing this value after the main menu screen. So enabling this second controller functionality requires a game patch or a memory edit.

With the enable_p2_controls_0020000c variable set, you can disable the Coordinate Display panel by pressing L+Right on controller 2.

You can also enable the panel by pressing L+C. Doing it this way also disables collision. This allows you to walk through walls and go out of bounds. L+A will re-enable collision.

Outside the walls of a room.

L+Start enables the encounter meter. This changes color in areas that have random battles.

The encounter meter. Thanks to SkullKidman for explaining its purpose to me.

My favorite feature is activated with L+Z. This pulls up a screen called 3d maze prm set, which allows you to warp to an arbitrary location. Change the mapno with the controller 1’s D-pad and press C to confirm.

posix and posiy determine where you land after warping. muki determines which direction you face. It’s unclear what ctl does.

Pressing Start+Z takes you to a similar looking menu called Bit Change. This allows you to change the progress parameters that the game tracks.

The Bit Change screen.

Pressing L+B takes you to the Save screen.

Saving the game.

L+Y will bring up the Game Over screen.

Game Over

There are a few mysteries that I couldn’t solve — if you’re a fan of this game, see if you can figure them out:

  • Pressing Start+Up / Start+Down adjusts the value of some parameter (stored at 00201034). But this doesn’t have any noticeable effect on gameplay.
  • Pressing L+X sets a value (at 00204298) that seems to have something to do with the phase of the moon. But I can’t tell what it does beyond that.
Adjusting the mystery parameter with Start+Up/Start+down.

Outro

If you like this sort of thing, check out my other Expansion hack archive for more patches that enable extra functionality in Saturn games.

Thanks for reading – I’ll be back again next week with a new Saturn article. In the meantime, check out my blog for more retro game reverse engineering.

About the author

Bo Bayles

Rings of Saturn: 32bits.substack.com

Be the first to comment

Leave a comment

Your email address will not be published.


*