Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,439,793
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-20-24 01:16 AM
Guest: Register | Login

0 users currently in ROM Hacking | 3 guests | 2 bots

Main - ROM Hacking - Bomberman Pocket NEW STUFF updated 28.10.2010 New thread | New reply


Naulahauta
Posted on 06-09-10 09:56 PM Link | Quote | ID: 131905


Red Paragoomba
Level: 19

Posts: 11/56
EXP: 30475
Next: 5302

Since: 10-27-09

Last post: 3698 days
Last view: 479 days
Pocket Bomberman is a Bomberman game for the Game Boy. It differs from most other Bomberman games because in the game, Bomberman is able to jump. This gives a whole new dimension to mass destruction across the land thus making the game enjoyable.

But okay, let's get this started. Grab the ROM with the [U] and [S] labels and head over to 0x2400A. There you'll see a bunch of pointers:
3C 40 65 41 9E 43 FF 45 58 48 61 49 C2 4B 13 4E 64 50 BD 52 C6 53 0F 56 58 58 B9 5A 12 5D 1B 5E 7C 60 CD 62 26 65 7F 67 88 68 F1 6A 5A 6D BB 6F 14 72.
Take the first pointer, 3C 40 -> swap the bytes -> 0x2403C. This is where the actual level data for Area one begins.

This is area one:


This is the bunch of data at 0x2403C ($100 bytes (also, bolded parts for extra elaboration):

08 09 09 09 09 09 09 09 09 09 09 09 09 09 09 0A
0B
00 00 11 00 00 00 00 00 21 00 00 00 16 00 0B
0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B
0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B
0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B
0B 00 7B 7E 7C 00 7B 7C 1B 71 73 00 00 7A 00 0B
0B 00 00 00 00 00 00 00 7B 78 76 00 00 7F 00 0B
0B 00 00 00 00 00 00 00 00 0E 7F 00 00 7F 12 0B
0B 70 00 00 00 7B 7E 7E 7E 7E 79 00 7B 78 7C 0B
0B 00 00 62 00 00 00 00 00 00 00 00 00 00 00 0B
0B 7B 7C 61 00 00 00 00 00 00 00 00 00 00 00 0B
0B 00 00 61 70 00 00 00 00 00 00 7B 7C 00 00 0B
0B 00 00 61 00 00 00 00 00 00 00 00 00 00 00 0B
0B 12 00 60 00 00 00 00 00 10 00 00 00 00 00 0B
0B 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0B
0B 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0B


Edit a byte and it'll take changes, not too difficult.

So that's the deal with the level, now onto the sprites:
When the $100-byte level data array ends, (we're at 0x2413C), you'll find a bunch of bytes:
E1 06 12 08 00 00 00 00 C0 02 12 00 00 00 00 00 C0 0E 08 00 00 00 00 00 C0 10 0E 00 00 00 00 00 C0 18 1A 00 00 00 00 00.
Chop them up to 8-byte combos and observe:
E1 06 12 08 00 00 00 00
C0 02 12 00 00 00 00 00
C0 0E 08 00 00 00 00 00
C0 10 0E 00 00 00 00 00
C0 18 1A 00 00 00 00 00

The format is ss xx yy ee ii dd rr kk
ss = Sprite to use. The level has four enemy characters. You can change the C0's to something else and watch how the sprites change. The E1 is the gate opener sprite. It is invisible but triggers the gate-open event.
xx = X offset. We move in increments of 8 pixels. 00 is absolute left.
yy = Y offset. We move in increments of 8 pixels. 00 is absolute top.
ee = Event.. thing.. I haven't really gotten the hang of this one, but as the 08 in the first 8-byte combo suggests, it has something to do with that. Fool around and see what happens.
The ii, dd, rr and kk stand for I Don't Really Know. They seem to be 00 always.

After that, there's an FF. After the FF, look at your offset. We're at 0x24165. If you go back to the beginning of this post and read the pointer array again, you'll notice that after 3C 40, there's 65 41. Swap the bytes and you get 0x24165. Which is were we're at. Which is where area 2's level data begins. You should also observe that there are 25 pointers and 25 levels in the game. This is no coincidence.

So basically that's it. What I've got to still do(cument), though:
-Tiles. What are blocks 00 through FF constructed from, where their graphics are retrieved and what their physical maps represent.
-Music Probably one byte. There's gotta be some level header array there somewhere, which'll probably help with the next one:
-Bomberman's starting coordinates. When creating new levels, it isn't very fun when Bomberman begins his journey from inside a brick.
-Also Time limits for each level.
-Those mystery bytes from the 8-byte sprite definitions.

I'll get on those later today. But for now, enjoy this video I made to demonstrate.
Also, a friend of mine said he'd be willing to code an editor, so expect big stuff

____________________
oh

Kawa
Posted on 06-09-10 09:58 PM Link | Quote | ID: 131906


CHIKKN NI A BAAZZKIT!!!
80's Cheerilee is best pony
Level: 138

Posts: 3734/5344
EXP: 30929079
Next: 733902

Since: 02-20-07
From: The Netherlands

Last post: 4492 days
Last view: 2627 days
Posted by Naulahauta
The ii, dd, rr and kk stand for I Don't Really Know. They seem to be 00 always.
Best data structure explanation ever.

____________________
Wife make lunch - Shampoo
Opera - give it a spin
Spare some of your free time?
<GreyMaria> I walked around the Lake so many goddamn times that my sex drive was brutally murdered
Kawa rocks — byuu

MathOnNapkins
Posted on 06-09-10 11:35 PM Link | Quote | ID: 131908


Super Koopa
Level: 62

Posts: 779/842
EXP: 1934521
Next: 50165

Since: 02-19-07
From: durff

Last post: 4482 days
Last view: 4005 days
Posted by Kawa
Posted by Naulahauta
The ii, dd, rr and kk stand for I Don't Really Know. They seem to be 00 always.
Best data structure explanation ever.


When it comes to code I like my comments like this:
"; what the fuck is this!!!????"

____________________
Zelda Hacking Forum
hobbies: delectatio morosa

Naulahauta
Posted on 06-11-10 03:13 PM Link | Quote | ID: 131934


Red Paragoomba
Level: 19

Posts: 14/56
EXP: 30475
Next: 5302

Since: 10-27-09

Last post: 3698 days
Last view: 479 days
0x2DEFA is where the intro text begins. "Long, long ago..." is the first string and after that there are some commands I have yet to decipher. FE means line break but the rest is cutscene related. The ending text is exactly after the intro text. The graphics to use are retrieved from 0x73C00. 00 = space, 01 = A, 02 = B, and so on.

The Jump game level format is identical to the ordinary level format. Easy mode jump game begins from 0x321A6. It's $400 bytes big and after that, there's an FF. Then the sprite definitions, then an FF again. Then begins the Normal mode jump game. That too $400 bytes and then FF, sprites, FF, Hard mode.

Also, update on the sprite format:
ss xx yy hy ?? ?? ??
The question marks are still a mystery, but the first bytes are Sprite, X coordinate, Y coordinate, High byte for Y coordinate. It is required for the jump games because the levels are so high.

More info coming soon regarding the tilemaps.

____________________
oh

Naulahauta
Posted on 10-25-10 08:07 AM Link | Quote | ID: 137326


Red Paragoomba
Level: 19

Posts: 38/56
EXP: 30475
Next: 5302

Since: 10-27-09

Last post: 3698 days
Last view: 479 days
RISE FROM YOUR GRAAAAVEEEEEEE
I pulled an all-nighter documenting everything I found and put up a site for all my documents. Expect more soon.

Check it

____________________
oh

Kiokuffiib11
Posted on 10-25-10 11:10 PM Link | Quote | ID: 137343


Porcupo
Level: 40

Posts: 204/313
EXP: 406815
Next: 34494

Since: 07-10-09
From: Marquette, Michigan

Last post: 3306 days
Last view: 1928 days
Posted by Naulahauta
RISE FROM YOUR GRAAAAVEEEEEEE
I pulled an all-nighter documenting everything I found and put up a site for all my documents. Expect more soon.

Check it


You should put the data on datacrystal.net (Or as it's now called www.datacrystal.romhacking.net )

____________________
セシル

Naulahauta
Posted on 10-28-10 04:52 AM Link | Quote | ID: 137383


Red Paragoomba
Level: 19

Posts: 39/56
EXP: 30475
Next: 5302

Since: 10-27-09

Last post: 3698 days
Last view: 479 days
Datacrystal and RHDN merged?
Wow, I'm late to the party.

I'll add the info up as soon as I get it to a more reader-friendly format. Right now it's a bit messy but you can understand what it says.
Also, page updated. More than 1/4 there!

____________________
oh

Main - ROM Hacking - Bomberman Pocket NEW STUFF updated 28.10.2010 New thread | New reply

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.021 seconds. (347KB of memory used)
MySQL - queries: 63, rows: 90/91, time: 0.016 seconds.