Actions

SCHG

Sonic Advance 3

From Sonic Retro

SCHG: Sonic Advance 3
Main Article
ROM Portion
Editing the ROM
Sprites
Sound Test
Sound and Music List
Dynamic Text
Zones
Musics
Hidden Level Select Menu
Special Stages
RAM Portion
RAM Editing
See Also
SCHG How-to topics
Sonic Advance PalTool
Sonic Advance 3 Tools
VBASDL

This is the Sonic Community Hacking Guide for Sonic Advance 3. The guide is based on Erik JS' Sonic Advance 3 Hacking Guide.

In this page I'll show you the most important aspects of SA3 ROM. Read carefully before going into RAM and ROM sections.

Let's start with the header. The game title is a string that starts at 0x0000A0. Its max size is no more than 11 bytes. At 0x0000AC, there's the serial string (4 bytes). In American SA3, it's B3SE. That "E" belongs to USA region. J is for Japan and P for Europe. At 0x0000BD is the checksum byte. On VBA, go to File-> ROM information. The value outside parenthesis is the right checksum for the game. If the inside value (actual checksum) isn't equal, and the ROM doesn't work, just change it to the correct and it should work. This method is valid for any GBA ROM (specially the intro'ed ones).

Let's go to the pointers. Pointers are nothing more than a group of four bytes that indicates a location at ROM that contains certain data. When something needs to be read from ROM, the pointer points to a ROM location + 08000000h. It's like that because the area reserved for games in GBA starts at 0x08000000 - you can see that at VBA, going to Tools-> Memory viewer. For instance, sprite palettes are at 0x353CCC. In ROM, their respective pointer will be like CC 3C 35 08 (this byte order is called Little Endian). If you are using Visual C++, then you don't need to reverse the order of the bytes when searching for a pointer. VC++ automatically searches reversed values - just search for 08353CCC. Also, note that in ROM and RAM section everything is treated as Little Endian, unless stated otherwise.

Now, the palette. GBA supports 32768 colors, and the cubic root of this number is 32, which means that each color level (red, green and blue) has 32 variations. In order to represent a color, GBA uses 2 bytes. Black is 0000 and white is 7FFF. But don't forget what I said about how the ROM stores values, in Little Endian ordering (white would be found as FF7F) If you want to know how to edit the palette, I have a proper page for that. Click here to open it in another window. And remember that VBA has a palette viewer (Tools-> Palette viewer).

Time to talk about texts. Majority of them are sprites, and can be edited through Tile Layer Pro. That includes: "press start", copyright info at title screen and the main menu options, for instance. On VBA, go to Tools-> OAM viewer, and slide the bar. If the text isn't "letter by letter" then it's a sprite. Text that is "letter by letter" are coded, like the level select text from Sonic 1 for Genesis.

Last, I want to talk about the monoblock technique that is used in the game. As I said before, sprite palette is at 0x353CCC. If you check out, you'll figure that it's Sonic palette. And it has a pointer. Now, where's the pointer for Cream's, Tails', Knuckles', Amy's and the rest??? Answer: it's the same for all the sprites! What happens is that all the palettes are in one big group (what I call monoblock), and if you alter the palette pointer you'll notice the "effect" in all of game's sprites. That pattern is followed by sprites, palettes and their mappings. About mappings, they give hints where to find sprites. For instance, the first mapping is for Sonic standing on foot, sprite state 0, second is Sonic looking up, sprite state 1... that'll be explained better at the proper section.

Underwater-related things

First off, in my research on Sonic Advance 3, I found that underwater areas have a global ripple attached to them. For example, removing BG1 and BG2 in Sunset Hill Act 1 will give you a ripple. The reason they never showed it was that firstly, it's on a cliff, so if it showed in the background it wouldn't make any sense; secondly, the ripple would also not affect the palm trees; and thirdly, the ripple shows beyond BG 3, so it would look glitchy.

Palettes are simple to edit. There are no custom underwater palettes. Editing the above-water palettes will result in converting the underwater palette.

Sonic Community Hacking Guide
General
Sonic Music Hacking Guide | SonED2 Manual
Game-Specific
Sonic the Hedgehog (16-bit) | Sonic the Hedgehog (8-bit) | Sonic Eraser | Sonic CD (prototype 510) | Sonic CD | Sonic CD (PC) | Sonic CD (2011) | Sonic 2 (Nick Arcade prototype) | Sonic 2 (Simon Wai prototype) | Sonic 2 (16-bit) | Sonic 2 (8-bit) | Sonic 2 & Knuckles | Dr. Robotnik's Mean Bean Machine | Sonic Triple Trouble | Sonic 3 | Sonic & Knuckles | Sonic 3 & Knuckles | Sonic & Knuckles Collection | Sonic Crackers | Sonic 3D: Flickies' Island | Chaotix | Sonic R PC | Sonic Jam 6 | Sonic Advance | Sonic Advance 2 | Sonic Advance 3 | Sonic Battle | Sonic Adventure | Sonic Adventure DX: Director's Cut | Sonic Adventure DX: PC | Sonic Adventure (2010) | Sonic Adventure 2 | Sonic Adventure 2: Battle | Sonic Adventure 2 (PC) | Sonic Heroes | Shadow the Hedgehog | Sonic Riders | Sonic the Hedgehog (2006) | Sonic & Sega All-Stars Racing | Sonic Unleashed (Xbox 360/PS3) | Sonic Generations
Legacy Guides
The Nemesis Hacking Guides The Esrael Hacking Guides
ROM: Sonic 1 | Sonic 2 | Sonic 2 Beta | Sonic 3

Savestate: Sonic 1 | Sonic 2 Beta/Final | Sonic 3

Sonic 1 (English / Portuguese) | Sonic 2 Beta (English / Portuguese) | Sonic 2 and Knuckles (English / Portuguese)
Move to Sega Retro
Number Systems (or scrap) | Assembly Hacking Guide | Subroutine Equivalency List | 68000 Instruction Set | 68000 ASM-to-Hex Code Reference | VDP Documentation | Official Sega 32X Documentation | Official Mega-CD Documentation | Official Sega Mega Drive Documentation