Original Post

I finally finished my special edition of “Mansion of Insmouse”, which I created using InsmEdit, an Insmouse No Yakata editor, the download and discussion for which can be found here:

http://www.planetvb.com/modules/newbb/viewtopic.php?post_id=18450#forumpost18450

The name of my special version of the game is “Mansion of Insmouse: Mario Madness Edition”, and the reason for the name is that each of the level layouts looks like a character from Super Mario Bros. 1, 2, or 3, or Super Mario World.

The download for this game, which is attached to this post, is already ready for play on a Virtual Boy using a FlashBoy or FlashBoy Plus, or you can also play it on your Virtual Boy emulator of choice.

I’ve also included a full level map guide attached to this post, which gives the password for each and every level of this special version of the game and which will also help you get those target times for each level of the game.

Special thanks to Matej Horvat for making the user friendly level editor (such things have to be user friendly in order for me to be able to use them ;-), and also special thanks to my brother Greg, who made a patch to create a simple title screen for this special edition of the game, which you will see on the first screen, in place of that much disregarded “Read Instruction and Precaution Booklets Before Operating” screen.

29 Replies

Hey,

I changed something. Try to figure out what…

Nice. But I already knew how to do that. 🙂

HorvatM wrote:
Nice. But I already knew how to do that. 🙂

🙂 I guessed so. I reused the tool I’ve written for SpaceSquash to replace the BGMap. Some more tweaks and I might release it (even though no one will ever use it).

thunderstruck wrote:

HorvatM wrote:
Nice. But I already knew how to do that. 🙂

🙂 I guessed so. I reused the tool I’ve written for SpaceSquash to replace the BGMap. Some more tweaks and I might release it (even though no one will ever use it).

I just tried it out on a Virtual Boy. The new title screen looks very nice! Nice job.

HorvatM wrote:
Nice. But I already knew how to do that. 🙂

I know you pretty much completely reverse engineered this game and that you have created a pretty much complete ROM map. Do you consider publishing your results in some form?

I was thinking about replacing some more images and stuff. I don’t want to go through the whole work you did again though.

My plan is to eventually put all of this onto my Web site to create the ultimate Insmouse resource, but my perfectionism prohibits me from doing it right now, and I’d have to translate everything first anyway.

So, just tell me what things you want to replace and I’ll give you the addresses. If you’re going to map things I haven’t yet (mostly ending cutscenes), it will be helpful to know these two functions:

8482 (LoadBGMap)
$6 -> source
$7 = index of BGMap (0 = 0x20000, 1 = 0x22000, etc.)
Note: BGMaps are always 8K

84A6 (LoadCharset)
$6 -> source
$7 = destination character data index divided by 256 characters (gets multiplied by 0x1000 and added to 0x78000 to produce the destination pointer)
$8 = number of words to copy (1 character = 4 words)

If you want to load BGMaps that are smaller than 8K, you can use this function:

13154 (CopyMemH)
$6 -> source
$7 = number of halfwords to copy
$8 -> destination

I just had brief look at the game but it looks like walls, doors and so on are drawn using BGMaps while enemies are drawn using objects. Do you know the position of the respective CharSeq, BGMaps and so on (I don’t really know how Objects work but I assume quite similar to BGMaps)? I assume the BGMaps/Objects are stored in a compressed format? Do you know how that format works?

Also, are there Pointer-Arrays somewhere that identify the respective BGMaps/Objects?

I don’t know much about the first-person view, but I know that it’s composed of multiple worlds/BGMaps, and all sprites (items, monsters, the crosshair, HUD icons, timer numbers) are objects:

41B78 – pointers to charset for each monster kind (4 words)
9A8F8 – charset for monster kind 0 (1024 characters)
9E0F8 – charset for monster kind 1 (1024 characters)
A20F8 – charset for monster kind 2 (1024 characters)
A60F8 – charset for monster kind 3 (1024 characters)
AA0F8 – charset for floor/walls/ceiling (256 characters)
AB0F8 – charset for floor/walls/ceiling, “moving parts” (I forgot what that means, probably doors)
AC0F8 – charset for floor/walls/ceiling
AE0F8 – charset for non-monster sprites
B90F8 – first-person view BGMap – charseg 0 is AA0F8
BB0F8 – same as B90F8, but for different eye
BD0F8 – BGMap for all doors – charseg 0 is AA0F8
BF0F8 – same as BD0F8, but for different eye
C10F8 – unknown BGMap – may be related
C30F8 – C10F8 for different eye
C50F8 – unknown BGMap
C70F8 – C50F8 for different eye

All addresses, except for monster charsets, are hardcoded.

Everything is uncompressed and loaded with the functions I listed before.

There are probably pointer arrays for the sprites, but I haven’t discovered them yet (well, actually, I know where a lot of pointers are, but I don’t yet know what they point to).

Dark monsters use the same characters as bright ones, but a different palette.

Brilliant, thanks.

 

Write a reply

You must be logged in to reply to this topic.