Another project started with so many remaining uncompleted, but since I actually took time searching/hacking memory values to help me, I don't intend on dropping this until I'm finished.
...
Yeah, I don't fault anyone for doubting me.
Anyway, I was looking through scans of my first real Nintendo Power issue and saw that old game called "The Immortal" which I never actually played. So I got curious and cautiously tried mapping a few rooms and tried to assemble them together to see if it would work or if the game coders had been smoking crack again while designing the levels. Surprisingly, the rooms fit perfectly despite the isometric perspective. So I decided to give it a try.
The game, for those who never played it, is basically a sort of dungeon crawler with involved one-on-one combat where you have to time both your sword swings and your dodging and try not to tire yourself too much. There are a number of simple puzzles and many, *many* deadly traps everywhere, most of them hidden.
Since the perspective is isometric, there is a section of the floor in every room that is hidden by the southern wall, which coincidently usually contains traps; finding every trap so far took some time.
Another thing that annoyed me is how some enemies will start running toward you as soon as you enter the room even if they are off-screen so it was seemingly impossible to find out their starting position. However, enemies would not reset to their starting position if you came back to their room, so it meant that their position would remain in memory for the duration of the level. That's when I decided to do some memory searching.
Using FCEUX's memory search functions, I manage to isolate a range of addresses for the horizontal and vertical coordinates of moving entities relative to their current room. Since there are several ranges of values always in the same order (all the horizontal positions, all the verticals, etc), they're probably memory arrays:
-0698h to 06A2h: Contain the horizontal positions, starting with the player's and then the various other entities (troll, goblin, will o' the wisp, bat, etc)
-06A3h to 06ADh: Contain the vertical positions
-06CFh to 06D9h: I don't know what the values represent, but freeze the value and the entity will no longer exhibit sprite animation
-06E5h to 06EFh: I don't know what it represents either, but freeze it and the entity will no longer react to your position (i.e. turn to face you)
By identifying which addresses represented which entity on each level and freezing the necessary values, I could ensure that after entering a room, every enemy would be completely frozen as if I wasn't even there. That felt extremely satisfying for my desire to be as accurate as possible.
I'm still undecided on how to handle rooms joined by ladders (link with arrows, ladder tiles, letters, numbers?), so don't be too hard when looking at the following previews... Also, these are the ones with all the secrets (traps, triggers, ladders, etc) revealed. I'm actually considering posting finished maps both with everything hidden and revealed.
Level 1:
Level 2:
Level 3:
God I love the new board! It's so much *easier* to use