GBA Hacking Tools
Note: these tools require knowledge of the addresses of sprite/palette data within the ROM. Check the links below for the lists of known addresses in GBA Shining games:
Navigation:
GBA Palette Generator/Reader
A simple tool to read or generate new GBA-compatible palettes, that is, a 16 colors palette with 15-bit RGB colors. The output is formatted so that it can be directly inserted into a ROM by pasting it into a hex editor.
The palette set here is also used by the other tools in this page whenever they need one to display graphics with.
Click here to show/hide details
Current functions:
- Reading a palette from an indexed .bmp image file and converting it to the closest possible colors;
Note: As of now there's no check for if the file is really indexed or not. Non-indexed files will give nonsense results such as a blank or messy palette.
Also, for files with more than 16 colors, only the last 16 will be read. - Manual color editing by setting 5-bit RGB values (range 0-31);
- Manual color editing by setting 8-bit RGB values (range 0-255) or hex codes and converting them to the closest possible colors;
- Editing by writing/pasting a standard html color hex code. Changes take place once you press enter or click away from the text box.
- Reading a palette from an address (in hexadecimal only) of the ROM. Useful if you want to tweak an existing palette, or if you want to use one in the Sprite/Tile Viewer below.
Note: Each color in a GBA palette is stored in two bytes (16-bits), yet only 15 bits are used to store the information, leaving an useless one set at 0. Because of that, if you read from an invalid address where that bit is set to 1, out-of-range values may pop up when the 0-31 color input range option is selected. I am not counting that as a glitch because it's a good indicator that the address you've read does not contain valid palette data. The same does not happen when you select the 0-255 range option instead, as that mode does convertions to turn the data into a valid color anyway. tldr odd behaviors happen when you read non-palette data, which is to be expected as the tool is not made for it.
Note 2: Glitch behavior may also happen if you go beyond the address space of the ROM; - The "+" and "-" buttons on the palette address advance the address by 32 bits, which is the size of a palette. This can be helpful to navigate a list of palettes if you have the address to one. It is however currently facing slowdown for reasons I don't understand, so bear that in mind.
Functions in development:
- Fix the slowdown on the "+" and "-" buttons;
- Ability to detect ROM size and not allow addresses beyond it;
- Issue where loading a ROM on both tools simultaneously does not update the filename on both;
- Issue where the BMP file name is always displayed even once the palette loaded from it has already been changed or replaced;
- A tool to insert the palette directly into an address of a ROM, with no need for hex editors.
Load indexed bmp file:
Palette address (Hex):
Palette
Color input range:
| Colors: | ||||||||||||||||
| R: | ||||||||||||||||
| G: | ||||||||||||||||
| B: | ||||||||||||||||
| Hex: |
Output format:
| Output: |
GBA Sprite and Tile Viewer/Ripper
A viewer for uncompressed graphical data in GBA ROMs. It uses the palette set in the Palette Generator above to render the graphics.
Click here to show/hide details
Current functions:
- Reads a GBA ROM and attempts to interpret any data as uncompressed sprites with the specified dimensions. Because GBA graphics are composed of 8x8 tiles, these dimensions must be multiples of 8.
Note: For now I am not checking file extensions as I don't see why. If you want to open a non-ROM file to see nonsense I will not stop you lol, but that's bound to be very glitchy and I'm not fixing anything related to only this use case; - The display can be saved by right-clicking it, making it easy to rip a bunch of sprite/tiles at once;
- Use the buttons "+" and "-" to navigate through the ROM address space, or directly type an address (in hexadecimal only). In the case of typing an address, it will load once you press enter, click away from the text box, or press the "Go!" button.
Desktop users can also navigate by keyboard upon clicking the screen. Arrows Up and Down (or W and S) skip a row of sprites, arrows Left and Right (or A and D) skip a single sprite, and Page Up and Page Down skip past the whole current display, like the buttons "+" and "-";
Note: Distortions or a blank space may show up if you go beyond the address space of the ROM. - The display size can now be adjusted, but must be in multiple of the sprite dimensions. Big displays may cause slowdown.
Functions in development:
- Ability to detect ROM size and not allow addresses beyond it;
- Issue where loading a ROM on both tools simultaneously does not update the filename on both;
- Fix distortions when the display goes beyond the ROM's end;
Go to address (Hex):
Sprite dimensions: x
Display dimensions: x