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.
I was busy with something different yesterday but I just had a brief look into how the sound is loaded. It seems kind of complicated though. It will be more complicated then what I did with loading the mazes. However, I will check if I find a simple solution. There are not too many songs after all so maybe it will just be a different song per stage in the end.
I started looking at the sound loading logic and made a plan how to hack it. The basic problem is that I’m not really good in assembler so I have to check out examples and the tech-scroll all of the time. It is kind of a tedious work and takes me allot of time. However, I think I know what to do next. I guess I will start next week or so to actually hack stuff.
I started hacking the song loading logic. The results look good so far. I managed to replace the current song with a different one by jumping out of the original code, checking if song 6 is going to be played, replacing the respective pointer if song 6 is going to be played and jumping back to the original code. However, I hard-coded the pointer that replaces the original one. So the music still changes for all levels.
The next step is to check the current level/stage and load pointers somewhere out of the ROM depending on those values.
ok, I wrote everything into the ROM and it kind of works. The pointer to the current music is now depending on the current stage and level loaded from an pointer array I created. I encountered on problem though.
I discovered the place in the WRAM where the current level is stored a while ago as I needed this for hacking the maze loading logic. During the running game the music is reloaded if you for example come close to an enemy. In this case the position in the WRAM does not contain the current level anymore and the wrong music is loaded. I already have a plan how to fix this. Probably gonna try it out tomorrow.
ok, so basically the custom song loading logic works fine. There is just one problem: stuff is loaded in the wrong order meaning the game loads the music first and then loads the current level to the wram. As the game reloads the music during a level the music loads the wrong song when this happens.
I tried through some solutions to fix this without any luck so far. However, I made a new plan to to solve this problem. I found the place in the ROM that loads the score screen. This means I can add some code there that counts up every time a level is finished. That way I’m independent from what the rest of the game does.
I’m pretty tired today so I guess I will start with this tomorrow or so.
Well, I started changing everything an hour ago. Everything worked out very well. A different song per level can now be loaded without any problems. However, another problem popped up. If you die my custom level counter is not reset properly. The result of this is that the the music in level 1-1 is the one of the last level if you died (or finished the game).
To fix this I have to find some place in the stage-select screen to reset my level counter. That’s a task for tomorrow.
thunderstruck,
if you are able to change the stage audio, what about sound efx? i realize the game only has a handful of them, but it would be great if we could make custom sounds for running and the gun.
Lester Knight wrote:
thunderstruck,
if you are able to change the stage audio, what about sound efx? i realize the game only has a handful of them, but it would be great if we could make custom sounds for running and the gun.
Well, I don’t add music. I just use what is hidden in the ROM. All of the sound effects are stored in one song which starts at 0x1B86A8. I think I saw another pointer array somewhere that points to the single sound effects within this song (somewhere around 0x1C3314). If you want to change them you will have to reverse engineer how the music is stored in the ROM and the write a tool that converts your new effects to this format. Please tell me if you figure anything out.
Ok, I did what I talked about yesterday and everything seems to work fine now. I still have to test it on hardware and in every single level.
After that I will add everything to FacEdit.
i’m sorry, i was confused by what you were doing. i though you were loading new sound files, i didn’t understand that you were changing where to start in the 1 file.
I added the song selection to FacEdit and it works fine. I also tested it on hardware. The music works fine but I experienced some slow downs. That may be caused by somthing else though.
Well, today I fixed the score… kind of. I thought fixing the score wasn’t possible for a long time as I don’t see a way to replace the 1234567890 on the credit screen with actual score. The reason for that it is an image (at least I assume it is) and I don’t see a way to replace it with a method that writes the score there.
However, I took a far simpler approach to display the score. After you beat a level the game displays a score-screen that shows the points you made in the level as well as the sum of those points. I simply change the game that way, that it displays the sum of all points you made in the current stage. If you die or beat a stage this is reset to 0.
This way the score-screen of x-14 always displays the final score for the current stage. Fixing the score this way was actually pretty simple to pull of. I think this is an acceptable compromise.
I got bored so I looked into the what the game writes into the BGMaps. I already saw once that the levelmenu has the numbers 1 to 5 on a BGMap. I thought that was strange because there are only 4 stages. A closer look showed that there is also an additional image for a fith stage. I attached a screenshot.
Attachments:
Well, there is not allot of stuff left I want to change. So far I can:
– add 14*4 new levels
– add any kind of enemy to those levels
– change the behavior of every enemy
– use the hidden Face2000 enemy
– use every available (hidden) song in every level
– display a fixed score
– deactivate the debug menu (Thanks to HorvatM)
– do all of this using a pretty simple to use level editor
The only other thing I want to do is fixing some of the typos in the credits and reactivate the hidden image (the one I showed in my previous post). I checked how the game loads and graphics. Unfortunately they are stored in a compressed format in the rom. I made a plan how to handle all of this. It will be some work but I’m confident that it will work out in the end.
However, I’m not in the mood for it right now. I guess I will take a week or so off before I really start on this.
thunderstruck wrote:
I got bored so I looked into the what the game writes into the BGMaps. I already saw once that the levelmenu has the numbers 1 to 5 on a BGMap. I thought that was strange because there are only 4 stages. A closer look showed that there is also an additional image for a fith stage. I attached a screenshot.
That is a gem of a find! Thanks for sharing that.
Benjamin Stevens wrote:
thunderstruck wrote:
I got bored so I looked into the what the game writes into the BGMaps. I already saw once that the levelmenu has the numbers 1 to 5 on a BGMap. I thought that was strange because there are only 4 stages. A closer look showed that there is also an additional image for a fith stage. I attached a screenshot.That is a gem of a find! Thanks for sharing that.
Yeah, and it fits even better in the game then the image with the mirrors. I didn’t saw anything else hidden though. Only some text I didn’t saw in the game (like ‘TEKI’ and ‘FLOOR’).
bigmak wrote:
?????????? Is that a high score ending screen ?????-Eric
Well, it is the credit screen that used to show 1234567890. I don’t think it was ever supposed to show the score. I can now write whatever I want in the credits now. So I guess I will put some thank yous there. What’s the name of the guy who bought the game again?