Room 094

Missing on maps

Room 94 (0x5e) is missing on virtually all maps. For all I know, it was discovered by shevek and me. Link to the first map that contains room 94: shevek's map of the castle

Why is it missing on maps?

Room 94 is missing because it has no entrances. Or, more precisely, no room has an exit to room 94.

Exits

Every room is coded in the ROM. And each room is coded to have exits:

(A room does not a property "entrance". Using "exits" probably means writing less code.)

OpenMSX: findcheat

The findcheat feature is great to find the exits to other rooms.

Start at the very beginning (which will be room 1, but we don't know that yet).
> findcheat -start
65536 results found -> Maximum result to display set to 15
Wait a bit. We are still in the same room, so:
> findcheat equal
41123 results found -> Maximum result to display set to 15
Head east. Hit F1 so the bat won't fly. We are in a different room, so:
> findcheat notequal
901 results found -> Maximum result to display set to 15
Wow, great improvement! Head back west, to the starting room. Let's try our luck:
> findcheat notequal
88 results found -> Maximum result to display set to 15
Another great improvement! Head west (Halo room). Let's try again:
> findcheat notequal
71 results found -> Maximum result to display set to 15
Only minor improvement :-/. But do continue to use equal/notequal until you reach some 3 results. Print them:
> findcheat -max 20
0xE042 : 133 -> 122
0xE60C : 132 -> 121
0xE60E : 212 -> 201
From other Maze of Galious cheats (check https://github.com/lutris/openmsx/blob/master/share/scripts/_trainerdefs.tcl), it is known that most items are at memory locations starting with 0xe0. Therefore, 0xE042 is our best bet, eventhough we aren't dealing with an item here.

OpenMSX: ram_watch

So 0xE042 is our best bet. Let's watch this variable constantly, with ram_watch:
ram_watch add 0xe042 -format dec -desc best_bet
ram_watch add 0xe60c -format dec -desc fair_bet1
ram_watch add 0xe60e -format dec -desc fair_bet2
You'll notice that when changing rooms, 0xe042 changes immediately, whilst the other two have to be loaded. Not rock solid proof, but we conclude 0xe042 is the RAM address that holds the current room number.

Exits (part 2)

Since we now know the actual room number, we can easily find the exits. Go to the start room. Observe (with ram_watch) that this room has number 1 (how nice!). Go to the room above (no pesky bats there). Observe that this room has room number 93. We are looking for the south/lower exit (to room 1), so
> findcheat -start
65536 results found -> Maximum result to display set to 15
> findcheat 1
740 results found -> Maximum result to display set to 15
Head upstairs again (to room 84). The south/lower exit should be room 93 (from which we came), so:
> findcheat 93
0xE649 : 1 -> 93
Bingo, south/lower exit is stored at 0xE649. Likewise, the other exits can be found. This leads to the following RAM watches:
ram_watch add 0xe042 -format dec -desc room_num
ram_watch add 0xe648 -format dec -desc exit_up
ram_watch add 0xe649 -format dec -desc exit_down
ram_watch add 0xe64a -format dec -desc exit_left
ram_watch add 0xe64b -format dec -desc exit_right

Cheat!

We can now override the exits :-). Say we want to go from the current room to the magical room 94:
poke 0xe648 94
poke 0xe649 94
poke 0xe64a 94
poke 0xe64b 94
Or, with less typing:
poke16 0xe648 0x5e5e
poke16 0xe64a 0x5e5e
Head downstairs.

Screenshot

(There's noise in this image for nostalgic reasons. Thanks OpenMSX, great feature!)

As of 2021-06-20, this seems to be the only screenshot of room 94.

Coin + red hostile: no idea where that comes from. The hostile moves in straight lines. It kills you, and you can only kill when you teleport yourself with toggle_mog_overlay and toggle_mog_editor. The MoG overlay calls the hostile 'verBlob' (somewhat like the vertical blobs found in room 95).