You are not logged in.
I've been working on a Pokémon Pinball (GBC) disassembly project, and a lot of progress has been made on it. The GitHub repository is here: https://github.com/huderlem/pokepinball
Feel free to join in. I'm finding it pretty easy going because the game is a lot less complex than a traditional pokemon RPG game.
Special thanks to Danny-E 33 for cleaning some stuff up early and yenatch for the music.
I think I just hit a milestone for the pokepinball disassembly. All known routines in the game have been dumped. main.asm clocks out at roughly 42,000 lines. The next general step is to label/dump the graphics-related data that are hardcoded in the routines.
That's impressive. I will probably see what I can contribute soon. Feel free to contribute the the tcg disassembly. I haven't touched it in a while, just because i finished what I was mostly interested in; music, cards, decks, text and graphics. And I get bored with just dumping asm.
The Pokedex entries appear in the exact same order with the exact same text as Red/Blue version (Rhydon, Kangaskhan, Nidoran_M, Clefairy, and so on). I think the data was literally copy-pasted from whatever text file they were using for Red/Blue development.
It's not that interesting... but it's fun to stumble upon this kind of thing.
Last edited by ShantyTown (2015-09-20 03:49:28)
Some recent progress on the disassembly:
I've been slowly going through all of the unlabeled static pointers and dumping/labeling the data they point to. This is basically "the plan" until everything has been labeled. Unfortunately, there are still about 800 unlabeled pointers.
I also discovered that each pokemon has its own collision mask when trying to catch it in Catch'em mode. I expected all of the pokemon to simply share a circular collision mask. If you want to take a look, you can find those here: https://github.com/huderlem/pokepinball … /mon_masks
In Pokemon Pinball, there is a bonus reward where two Pikachus can save your ball in the bottom corners of the stage. When they are in the act of propelling the ball upward, a raw audio clip is played that sounds like "Piiiiii-Kaaaaaaa". It turns out that both Pokemon Pinball and Pokemon Yellow Version share the same code that plays audio clips. Additionally, Pokemon Pinball borrows two Pikachu sound clips from Yellow Version.
In the ROM, the actual sound data is stored as 1-bit pcm. "pcm" stands for pulse-code-modulation, which is a fancy way of saying "sound wave amplitudes". Since the pcm is only 1-bit, each sample in wave is either maximum or minimum amplitude--"on or off". Of course, this results in a very low-quality sound. That's okay, because the GameBoy wasn't designed to play pcm audio.
Then how does Pokemon Pinball/Yellow play the pcm data? The playback routine writes volume data to the GameBoy's wave channel (channel 3). The logic goes like this:
Read single 1-bit pcm sample
Write either 100% or 0% volume to the wave channel
Wait a set number of CPU cycles
Repeat until the pcm data is over
Now that we know the audio's data structure (1-bit pcm) and how the game interprets that data, we should be able to do two things:
Convert the 1-bit pcm data from the game into a .wav file
Convert an arbitrary .wav file into 1-bit pcm data tha the game can understand
Converting 1-bit pcm data into a .wav file is trivial, and it turns out converting a .wav into a 1-bit pcm stream is also pretty straightforward. This allows us to use .wav files in the pokepinball and pokeyellow projects. At compile time, the .wav files are converted into the 1-bit pcm format using a python script.
Here are the .wav files ripped from the games:
https://github.com/pret/pokeyellow/tree … achu_cries
https://github.com/pret/pokepinball/tre … ound_clips
This also allows you to replace any of Pikachu's cries in Pokemon Yellow, for example, with your own recorded voice. Here's me testing that out:
Here's a fun animated gif showing the ROM coverage of pokepinball over time: http://i.imgur.com/ZR6a7EW.gif
That needs some defragmentation :P
Hacks Gameboy 8-bit music in Pokémon Gen I & II, composes 8-bit music in FamiTracker
I changed the Pokedex so that it shows you the ball that you caught the pokemon with:
Pokemon seen/owned flags are just stored as flags, so I had to update the logic for that data to store the pokeball type when capturing a pokemon.
This disassembly is nearing "completion", meaning there are only 19 INCBINs from baserom.gbc remaining. I've been working pretty hard on that recently--I think there were ~300 INCBINs 3 months ago. Once the baserom.gbc dependency is removed, I'll work on taking moving stuff out of main.asm, since it's currently 53,000 lines long. After that, I'll probably make some fun hacks with it to weed out any possibly-missed hardcoded pointers.