Original Post

So, yeah. I’m one of the chosen ones that got the Faceball ROM early. Just to prevent misunderstandings: I got the ROM early because I’m a nice guy. I don’t do this for money or to get a free copy. I will buy both, the normal and the collectors edition. The original version is a really great game. I played through it multiple times and I think it is easily worth 100$.

I spent the last 4 or 5 days hacking around in the ROM and have already discovered allot of things. It is my first ROM hacking project, so I needed some time to figure everything out. I focus on changing the gameplay and don’t try to fix the typos. Special thanks go to Greg Stevens and HorvatM who pointed me at the right tools. The Sacred Tech Scroll from Guy Perfect made things allot easier for me. He also took the time to explain me how to write asm statements and get them into a ROM (even though he didn’t know what he was helping me with).

That said. manipulating the ROM is fairly easy. After 2 days I could already do things I would have thought are not possible. I can’t wait for what guys like HovratM or Greg Stevens can pull of. So here is what is possible so far.

There are 14 mazes in the ROM which I can freely modify. Meaning I know how to:

– change wall positions
– change wall types (I was hoping to find a mirror wall-type as there are some hints in the game that this was planned but it seems like they didn’t make it into the code.)
– change enemy start position
– change enemy strength
– change enemy drop item
– change enemy attack behavior
– change enemy movement behavior
– change enemy escape behavior
– how to attach a shield to an enemy
– some other stuff I can’t remember right now
– oh yeah, there is a Facball enemy I can use

I also think I know where the items that simply lie around in the levels are stored, but I didn’t play around with that yet.

On top of that I figured out how the mazes are loaded. This allows me to create completely new ones, put them somewhere in the ROM and load them instead of the existing ones.

As I said before, there are only 14 mazes. This means if I manipulate maze 1 it changes for all 4 stages. However, I figured out where the selected stage is stored. After that I wrote some code that is executed instead the original maze-loading code. This allows me to load what ever maze I want and yeah, this means I can have 56 different mazes in the game.
However, I only tested this in a very simple way.

OK, that it for now. Ask questions if you want to. I will keep the updates coming.

178 Replies

OK, the basic functionality of the level editor is there. I can draw mazes, add enemies (right now only with their standard behavior) and patch everything to the ROM. There is a long list of stuff that has to be added/changed but the initial version works.

Right now I only implemented the patching for level 2-1. Doing this for the remaining mazes shouldn’t be to complicated.

Seems like I can add 20 enemies to a maze. After that the game crashes. That’s still allot enemies though.

I made short video showing of the very first version of FacEdit. You can check it out here:

http://www.youtube.com/watch?feature=player_detailpage&v=66udV3uwwBo

Please remember that this is an very early version, so there are still allot of features missing.

it is looking good! thank you for all of your hard work.

Very exciting, thank you for doing this!

I subscribed, btw. 🙂

Thunder. I love you….you complete me.

-Faceball

bigmak wrote:
Thunder. I love you….you complete me.

Ew, Eric. That’s gross.

-Faceball

Oh…

OK.. I did several improvements to the GUI. I changed the dimension of the walls (now that I know what the max size for walls is). This allows me to place enemies more accurate. I also fixed the calculation of the y-position for walls (it was mirrored). On top of that I optimized the calculation of enemy positions. I double checked everything with what actually happens in the game and it looks fine so far.

There are some things left I want to do before I release the alpha version. Depending on how busy I am this may take a week or two.

OK, some more changes: I added another drop item to the enemies. I also added the items the lie around in the level to the editor. There is now also a dialog that allows you to set the player position, health and remaining time.

I tested everything and the patching works fine.I guess the next step is to try this out with multiple levels.

OK, I changed the patching so that it now writes all 56 levels to the ROM. I had to adapt my custom maze loading logic which I hacked to the ROM a while ago but I can now load all of them. Right now there is only an empty room with on enemy in it in ever level. For testing I justed the editor to write the stage and level number (using walls) into every level. That way I tested if every single level can be loaded. Everything worked fine so far. I didn’t used items or allot walls/enemies though. So there might be some side-effects I didn’t discover yet.

There are a couple of features left to implement before the alpha version is done… we are getting close though.

I fixed the behavior of Shieldman today in the level editor. He now uses his shield again. I thought that I once managed to attach his shield to an other enemy but I must have been wrong. I tried it again with no luck. Well… at least the shield is back.

HorvatM told me how to access the Debug-Menu in the emulator. Apparently you have to use keyboard keys that are far away from each other. This configurations seems to work:

A: P
B: O
L: Q
R: W
Select: V
Start: B

Access to the debug menu allowed me to analyze how the music is loaded, as you can select the different songs there. I found where everything is stored in the WRAM, hunted down how it is loaded there, found where the music is in the ROM and finally found the pointer array that points to the music (at 0x1C3314). Each song is identified by 7 pointers (I don’t know to what they point yet but I guess to the music for each channel and configuration). There are 15 songs identified this way. However, the first song only contains all of the sound effects. Every other song can be accessed though the debug menu so there was nothing hidden there.

By modifying this pointer array I can exchange songs with each other. However, it doesn’t allow me to play different songs on each stage/level. Therefore I need to change the music loading logic. I guess I will look into that next… but I think this is already enough for today.

That’s awesome and fantastic work! It sounds like you’re working towards being able to pick what tune you want to play for each level? Perfect. 😀

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code. I feel like something like that would go a long ways towards writing some sort of synth program or a tracker or something.

jrronimo wrote:

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code.

You silly person. Music is usually one of the easier things to hack. (-:

Easier my ass. The VSU’s many capabilities (interval, envelope, etc.) mean that probably everyone designed their own cryptic MIDI-like format. And, at least in Insmouse, the sound code is a mess of several routines that appear to have been written in assembly by hand and they exchange data in registers, so it’s very hard to follow because you don’t know which of the many registers of the V810 hold relevant data and which are just garbage.

Guy Perfect wrote:

jrronimo wrote:

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code.

You silly person. Music is usually one of the easier things to hack. (-:

When you haven’t started anywhere with anything, every little bit helps, heh. I’ll keep it in mind, though, and actually dig into this stuff one of these days.

HorvatM wrote:
Easier my ass. The VSU’s many capabilities (interval, envelope, etc.) mean that probably everyone designed their own cryptic MIDI-like format. And, at least in Insmouse, the sound code is a mess of several routines that appear to have been written in assembly by hand and they exchange data in registers, so it’s very hard to follow because you don’t know which of the many registers of the V810 hold relevant data and which are just garbage.

Interesting! It almost sounds like they were doing some sort of procedural generation type stuff — i.e., the music changes based on what’s happening in the environment. Moonbase Commander for PC does that sort of thing; it’s really neat when you pull it off!

Anyway, sorry for hijacking the thread. I should start a new one one of these days.

HorvatM wrote:
Easier my ass. The VSU’s many capabilities (interval, envelope, etc.) mean that probably everyone designed their own cryptic MIDI-like format.

That’s what I had in mind, was cracking the MIDI-like format. That’s the part that’s easy, ’cause you can just change things and see what happens. It’s no difficult task to figure out a data format when you can see the effects of changes you make.

jrronimo wrote:
That’s awesome and fantastic work! It sounds like you’re working towards being able to pick what tune you want to play for each level? Perfect. 😀

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code. I feel like something like that would go a long ways towards writing some sort of synth program or a tracker or something.

If you are intrested in sound I could go ahead and polish/comment the sources oh my midi player so that it can be released. It is still not perfect but maybe a good starting point.

thunderstruck wrote:

jrronimo wrote:
That’s awesome and fantastic work! It sounds like you’re working towards being able to pick what tune you want to play for each level? Perfect. 😀

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code. I feel like something like that would go a long ways towards writing some sort of synth program or a tracker or something.

If you are intrested in sound I could go ahead and polish/comment the sources oh my midi player so that it can be released. It is still not perfect but maybe a good starting point.

That’d be great if you’ve got some spare time to do it! Not a high-priority project by any means — I’m super-noobish and it’ll be a long time before I do anything with it.

jrronimo wrote:

thunderstruck wrote:

jrronimo wrote:
That’s awesome and fantastic work! It sounds like you’re working towards being able to pick what tune you want to play for each level? Perfect. 😀

I’d be very interested to see what the music “looks” like, programmatically. But maybe that’s impossible without the source code. I feel like something like that would go a long ways towards writing some sort of synth program or a tracker or something.

If you are intrested in sound I could go ahead and polish/comment the sources oh my midi player so that it can be released. It is still not perfect but maybe a good starting point.

That’d be great if you’ve got some spare time to do it! Not a high-priority project by any means — I’m super-noobish and it’ll be a long time before I do anything with it.

I will put it on my agenda then. The last time i released my sound engine people didn’t seem to be too interested into it, that’s why I haven’t taken the time to release the improved version yet. However, I think it is about time. I did something incredible stupid lately though causing me to loose some of my work-in-progress. Hopefully I will be able to recover my svn, otherwise I will have a serious problem.

 

Write a reply

You must be logged in to reply to this topic.