| |||
Views: 88,560,826 |
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search | 05-08-24 01:32 PM |
|
Guest: Register | Login |
Main - Posts by Naulahauta |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 1/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Wow.
But seriously, thanks. I personally (probably many others too!) totally needed this, not to mention this is a great submission to the ROM hacker community. Thanks and sorry. Didn't intend to wake you up. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 2/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Sounds pretty good. I'm pretty sure that Kejargon(?) guy had some music hacking notes up somewhere. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 3/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Man, this sounds great! Go for it! ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 4/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
My surname. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 5/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
There's really no way around it.
However, whenever you want a higher-resolution version of an image, you should try TinEye. It's a different kind of image search: You give it an image which it analyzes and then it scours through the intertubes to find other iterations of the image. You can also use the service to find cleaner versions of fussy JPEGs or something. Sadly, your image showed 0 results. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 6/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
If I may suggest, export four WAVs of each channel's bleeps and convert them with a WAV to MID tool. They exist and suck badly, but even the most basic ones can convert simple tunes to midi notes.
Or just figure out the format. What game are you screwing around with? ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 7/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Superb! Glad to see you're alive and well :> ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 8/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
READ LAST POST, IT'S FAR BELOW
Chalvo 55 is a fun Game Boy game released only in Japan. I've gathered some notes from it as an effort to spark motivation for a possible editor. Let's begin! When we jump to 0x18000, we see the bytes of the very first room of the game. Observe:
The bytes correspond to the tiles. Even the sprites (the blocks and the enemy) are defined in the byte array! You can edit these bytes how you wish and the changes will take place. The physical maps are also pre-defined, so blocks will always be blocks and diamonds will always be diamonds. But how do we know what blocks do the bytes represent? Let's head over to 0x18C00. I won't paste all of the definitions, but just a few to give you an idea what I mean: 02 02 FF FF FF FF 02 02 66 67 86 87 02 02 A6 A7 C6 C7 02 02 A8 A9 C8 C9 02 02 B0 B1 D0 D1 FF FF A8 A9 96 97 FF FF 70 71 98 99 FF FF A8 A9 96 97 02 02 70 71 90 91 02 02 FF FF FF FF 02 02 7E 7F 9E 9F 02 02 C0 C1 C8 C9 02 02 7C 7D 9C 9D 02 02 0D 0E CE CF FF FF 1B 1C 3B 3C FF FF 40 41 60 61 FF FF 80 81 A0 A1 02 02 AA AB CA CB Compare it to the graphics page found in 0x48000. You can view it in Tile Molester or whatever you like. So let's take the first 6-byte combo, 02 02 FF FF FF FF. The first two bytes, '02 02' mean "this is a tile, not a sprite". The four bytes after that define the 8x8 tiles used to build the block. This block is constructed from FF, FF, FF and FF. It is the single 'air' block. And since this was the first defined block, it is '00' on the level block data array. Check back on the map on the beginning of the post; where there's air, there's 00s. The next one, 02 02 66 67 86 87, is a crumbled block. If you look at the tilemap and take tile 66, 67, 86 and 87, you will make that very block. This is 01. Once again, if you look at the data array up there, there are 01s here and there, and each is a crumble block. But now, let's jump to the ones that begin with FF FF. That means "This is a sprite". The first FF FF-prefixed combo is FF FF A8 A9 96 97. Take tiles A8, A9, 96 and 97, and what do you know, you build a pink block similar to the one seen in the left and right edges of the first room. The behavior is defined elsewhere. And this is block number 05, so using 05 anywhere in your level will bring that pink block sprite right there. Simple as that! Another fun thing is that if you change that FF FF prefix to 02 02, the enemies turn into stone: Right now I've gotta flee but I'll be back later today with more data. Stay tuned! ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 9/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
blackhole89: You're most likely right. It must be a bitwise thing, but so far I've only encountered FF FF and 02 02. I'll fool around with more bits later today.
Kawa: Haha, yeah. Surprisingly simple alright. Once again I came to only step by. I gotta go again but I'll be back sooner or later. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 10/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
@marcum81: An incredible (Like, Lunar-Magic incredible) DKC1(/2/3) Editor is under development by one of the most phenomenal reverse engineers of our time. You can find more info by Googling Simion32.
@Matrixz: There are two editors for Super Mario Land 2. I think there's one for Megaman X too but don't count on my word. Also, An editor for Wily Wars was under development long ago. No idea what happened to it. I remember the guy was Japanese but was good in English. As for myself, obviously Chalvo 55, mostly for the simplicity of the format and the fact that Puzzle games appeal to the hacking community often because of their nature. Then, of course, Super Mario Land 2. I, in fact begun hacking Super Mario Land 2 a long long time ago, back when I was known as 'Raccoon Sam' and hoped to have a complete disassembly by the end of 2009. But I didn't. I also played a significant part on the development of MooJelly, a SML2 editor (which isn't really all that good...). Maybe one day I'll live in that utopia where a good SML2 editor is born. (Shameless plug.) Super Mario Land 2's level/graphics format is also essentially the same as Super Mario Land 3: Wario Land. I also agree with Ailure on the SMW2 statement. Maybe one day... EDIT: SUTTE HAKKUN ALSO OH FFFFFFFFFFFUUUUUU ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 11/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 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 |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 12/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Looks psychedelic as hell, and that's a good thing imo. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 13/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Posted by AilurePosted by TorinI can understand people loving RPG games, but I always thought they were one of the more awkward games to hack... since a huge part of an RPG is the story rather than the game engine. Too true. But on the other hand, when people put effort into them, RPG hacks can be very appealing. Let's see what kind of fruits Lazy Shell bears after some time. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 14/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 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 |
| ||
Red Paragoomba Level: 19 Posts: 15/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
I dunno, it's appealing to the eye but the 'Dread' sinks behind the 'Metroid'. The texts seem to be a bit too flat as well.
Spoiler: but that's just like my opinion, man ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 16/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Okay.
Okay. Umihara Kawase, also known as that-awesome-yet-weird-puzzle-platforming-game is one of those games you wish there was a level editor for. Now, I've looked into the level format and it makes sense but simultaneously fucks your mind. Observe: 0xC210E is the beginning of Field 00's level data. It ends at 0XC3191, and in its entirety it's 0x1084 bytes big. It includes the tiles to use for the level, starting point for the player, sprites and physical properties of each tile. Probably time and music bytes too. Tileset to use isn't, however, defined in this bunch of data. The mystery begins at 0xC3015. Or, to be honest, anywhere in the data where there's these strange combos. Check this out: 0xC3015: 8E 4D 8D 4D 8C 4D 8B 00 4D 8A 4D 89 4D 88 4D 87 00 4D 86 4D 85 4D 84 4D 83 00 ... Compare it to this tileset I snatched from the ZST of Field 00. The level uses this 2-bank tileset btu the graphics themselves are compressed so you won't find them in the ROM through Tile Molester or stuff like that. Bank 0: Bank 1: If you compare the bytes, you'll notice that the first underlining I did, 8E 4D 8D 4D 8C 4D 8B is a set of four tiles from bank 1, each followed by a property byte (4D). In the property byte, it is defined what palette the tile uses and what bank is the tile retrieved from. So okay, let's change those bytes to something else, let's say AB. So now, 8E 4D 8D 4D 8C 4D 8B turns into AB 4D AB 4D AB 4D AB. Save and open an emulator, this is what you get: Superb! We've changed four tiles. We also know that we can change it to anything that our tilesets offer us. The problems arise when we move onto the non-underlined parts. As you probably noticed, there's a 00 between the byte array: 8E 4D 8D 4D 8C 4D 8B 00 4D 8A 4D 89 4D 88 4D 87 00 4D 86 4D 85 4D 84 4D 83 00 ... Change any 00 to anything else and... whoa Now, those 00s (and other evil purposeless bytes and byte combos) are scattered through the level data. The bytes never appear as a constant stream, it's always four bytes max, then that combo breaker 00 or 04 or 00 0F 2C or some crazy 'useless' byte shows up. But regardless, it's a start. Right now I've got to flee, but I'll be posting more of my findings, mostly sprite construction data, as soon as I get home. In the meantime, screw around in that area. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 17/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
There was an old game for Mac OS (8?) that's name was 'Grunt'. It was about some pig who searched for emerald pieces.
It can't be found anywhere on the internet :< ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 18/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Oookay, slowly getting the hang of this. First off, let me explain the property byte in bits.
vhbp al?b V is for Vertical flip of the tile. H is for Horizontal flip of the tile. B is for Behind. If this bit is set, you (and all sprites, for that matter) will be hiding behind this tile. P, A and L are for PALette. 8 palettes to choose from. ? is... I don't know. Seems to a some kind of a hybrid bit between bank and palette selection. Another interesting this is that this bit is never set. B is for Bank. If not set, load graphics from bank 0, if set, from 1. I've also confirmed that the purpose of the 00s is not physical attribute defining. The first $28B bytes are used for defining physmaps and possibly sprites too. Editing any of the bytes in this area will not result in visual changes (except the total garbage-fest that occurs when editing a wrong byte). ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 19/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
Okay, something interesting. I opened the ZST in a Hex editor and took a look at the byte array. Very obvious level data.
compare it to my old map rip of the level. That is most obviously the lower left area. Those N.N.N's are the trees' physmap. Dunno really how to continue from here but I'll keep screwing around. Stay tuned.. I have a good feeling. ____________________ oh |
Naulahauta |
| ||
Red Paragoomba Level: 19 Posts: 20/56 EXP: 30528 Next: 5249 Since: 10-27-09 Last post: 3716 days Last view: 497 days |
I like the vector ones. I'd be even ready to filter to a svg embed, but then again I don't know if that'd be too good. ____________________ oh |
Main - Posts by Naulahauta |
© 2005-2023 Acmlm, blackhole89, Xkeeper et al. |
MySQL - queries: 140, rows: 172/172, time: 3.721 seconds. |