Everything after the code, 0x0803B8B0-0x08800000, lives in
games/xs/data/data.s. This document covers the 412 labels
there that still copy their bytes from baserom.gba (6,504,293 bytes,
of which the last 106,548 are 0xFF cartridge fill, so 6,397,745 bytes
count toward the data total). For each one it records what reads it,
what the bytes are, and how hard it would be to build from repo sources.
The data total and the matched share are the ones
docs/progress_report.md "Data progress" defines:
8,038,172 bytes, of which 1,640,427 (20.41%) are built today.
The same information is in machine-readable form in
tools/data_map.json, one object per raw
label, with regions sub-lists for the composite blobs.
- Code references. The ROM was re-linked with
ld -q(emit relocations) into a scratch ELF. EveryR_ARM_ABS32relocation in.textwhose resolved value falls in the data range is a literal-pool reference from a C function. That gives 648 references, all to label starts; the enclosing function comes from the symbol table. A brute-force scan of 4-byte-aligned code words for0x0803B8B0-0x08800000values found 41 more hits, all instruction pairs, no missed references. - Types.
externdeclarations of eachgStaticData_*inengine/src/andengine/include/, plusCOMPILE_TIME_ASSERTstruct sizes. - Data-to-data pointers. Every aligned word in the raw blobs was
checked for ROM addresses. Many hits in graphics and audio data are
coincidental (two 16-bit tilemap entries, or a smooth
u32ramp, often look like0x08xxxxxx). A pointer was only trusted when a consumer's C code explains it, or when a whole structure of them checks out (the chained tag-0 assets, the 2,429 frames of the sprite banks, the 41 level descriptors). - Structure walkers for the big blobs, written from the matched C:
the sprite-bank walker (
GetSpriteTileBase/GetSpriteFrame/sprite_renderer.cpp), the level-descriptor walker (level_layers.cpp,bg_layer.cpp,tile_cache_cell.cpp), the category-descriptor fields (cell_anim.cpp,bg_picture.cpp,engine/include/engine/actor/actor_anim.h), and aLoadTaggedAssetheader test (tag0x00/0x10/0x30) at every pointer target.
The helper scripts are not in the repo; the algorithms are described in each section below so the next pass can rebuild them.
Effort means the work to turn the bytes into a repo source that rebuilds them byte-exact: easy is a small typed table with known consumers, medium needs a small converter or a careful typed description, hard needs a real format decoder or has an overlap or layout problem. Confidence is about the format identification.
Region-level view in ROM order. The six huge blobs are split into the components found inside them (each gets its own section below). The 404 remaining raw labels are grouped. Every one of them is listed in the appendix.
| Range | Size | Format | Consumers | Conf. | Effort |
|---|---|---|---|---|---|
0803B8B0-080B1444 |
482,196 | BG0 cell animation A (palette, 19x13 cells, 60 frames) | InitCellAnim/UploadCellAnimFrame via category descriptors 0-2 |
high | converted |
080B1444-080B2120 |
3,292 | category 0 sub_effect_record table (164 records) |
SelectActorCategory, sub_802A5xx |
high | converted |
080C0C36-080C2758 |
6,946 | 2 B pad + category 1/2 sub_effect_record tables |
same | high | converted (the pad is gbagfx's padding) |
080C2758-080FF1B0 |
248,408 | compressed OBJ frame sets A and B (the old "rotation strips") | GetAnimFrameData via table_B 0817941C/0817A880, unpacked by the gUnpackRleSpriteFrameFunc IWRAM hook |
high | converted |
080FF1B0-0813D934 |
255,876 | BG0 cell animation B (38x10 cells, 21 frames) | InitCellAnim via category descriptors 3-6 |
high | converted |
0813D934-0814174C |
15,896 | category 3 BG1 picture + sub_effect_record table |
LoadBgPicture, SelectActorCategory |
high | converted |
08151AC2-0815A050 |
34,190 | category 4-6 BG1 pictures + sub_effect_record tables |
same | high | converted (the pad is gbagfx's padding) |
0815A050-08167AD4 |
55,940 | compressed OBJ frame set C | GetAnimFrameData via table_B 0817BA44 |
high | converted |
08167AD4-0817E78C |
92,180 | 200 small/mid tables: gameplay, menus, HUD, actors, text (the built sfx table sits in between) | direct, see appendix | mostly high | easy (a few medium) |
0817E78C-0817E7AC |
32 | u16[16] |
InitLanguageSelectGraphics |
high | done (C) |
0817E7AC-0824B638 |
839,308 | level tile sets 1-3 (tag-0x00 raw 8bpp tiles) | bg_layer.cpp via bg_layer_desc.tileData |
high | done (grit) |
0824B638-08270F08 |
153,808 | per-room level data, 33 rooms | level_layers.cpp, tile_cache_cell.cpp, bg_streamer.cpp, room_entities.cpp |
high | done (C, levels.md) |
08270F08-082B91D0 |
295,624 | level tile sets 4-5 | as tile sets 1-3 | high | done (grit) |
082B91D0-082BF120 |
24,400 | per-room level data, 8 rooms | as block 1 | high | done (C) |
082BF120-084A4660 |
1,987,904 | sprite tile pool for the 56 sprite banks | sprite_renderer.cpp (GetSpriteTileBase + frame offset) |
high | done (a PNG per frame, tools/sprite_frames.py) |
084A4660-084A5600 |
4,000 | 125 OBJ palettes (gObjPalettes) |
InitLevelState/RunPauseMenu palette cache, GetPaletteSlot |
high | done (JASC .pal) |
084A5600-084C0006 |
109,062 | sprite-bank table ("master asset table"): header, 56 banks, 2,429 frames | RunPauseMenu, InitLevelState, every **gSpriteBankSet user |
high | converted (C) |
084C0006-0855BCB4 |
638,126 | GAX2 sound-effect data set: 88 instruments, 87 8-bit samples, sample table, the SFX voice handler type | PlaySfx/GAX_fx_ex voices via GaxSongHeader.sfxTypes (StartSong) |
high | converted (gax_audio.py --sfx) |
085A4C5C-086ECCD2 |
28,979 | 111 labels between the built intro/tileset1 LZ77 blobs: GAX2 tables and strings, libgcc __clz_tab x2, EEPROM tables, 23 intro palettes, 67 alignment pads |
direct / slide packages | high | easy (the pads and palettes done) |
086C127C-086D9CAC |
100,912 | raw level asset (room 0825E7DC) |
LoadRoom -> SetCollisionSource/SetBgStreamerSource |
high | done (decoded tilemaps) |
086ECCD2-087E3BEC |
1,011,482 | 2 B pad + 6 raw level assets | same | high | done (the pad is gbagfx's padding) |
087E3BEC-087E55E4 |
6,648 | 93 gcc 2.x vtables | constructors (CreateMovingSprite, ...) |
high | easy |
087E55E4-087E5FCC |
2,536 | IWRAM image (ARM code + data, copied by crt0) |
crt0.s |
high | converted (platform/gba/asm/intr_main.s, engine/src/engine/*/*_arm.cpp, engine/src/engine/sys/iwram_data.cpp; the code counts as code, 540 B of data) |
087E5FCC-08800000 |
106,548 | 0xFF fill (not counted as data) |
- | high | - |
By category, as a share of the 8,038,172-byte data total:
| Category | Bytes | % of data | Effort |
|---|---|---|---|
| Sprite tile pool | 1,987,904 | 24.73% | medium |
| Level tile sets (5 tag-0 assets) | 1,134,932 | 14.12% | medium |
| Raw level assets (7) | 1,112,392 | 13.84% | medium (opaque .bin), hard (real decode) |
| BG0 cell animations (2) | 738,072 | 9.18% | medium |
| GAX2 second data set (sound effects) | 638,126 | 7.94% | converted |
| Compressed OBJ frame sets (3, the old "rotation strips") | 304,348 | 3.79% | converted |
| Per-room level data | 178,208 | 2.22% | hard |
| 404 small/mid labels | 127,807 | 1.59% | easy (a few medium) |
| Sprite-bank table | 109,062 | 1.36% | converted |
| BG1 pictures (3) | 37,096 | 0.46% | medium |
sub_effect_record tables (7) |
23,224 | 0.29% | easy |
Other (125 OBJ palettes, IWRAM image, pads, u16[16]) |
6,574 | 0.08% | easy/medium |
- Testing the tag-0x00 theory (docs/graphics.md, "The two largest
untyped ROM regions"). It is half right.
gLanguageSelectPalette3does hold tag-0x00assets: five of them,{u32 size << 8}plus raw bytes, in two chains where each asset ends exactly where the next begins. But they are BG level tile sets (8bpp, 64-byte tiles, fed to the VRAM tile-slot pool attiles + 4), not sprites. The sprite tiles have no tag header at all. They are one raw 1.99 MB pool, addressed astileBase + (frame.packed & 0xFFFFFF), wheretileBaseis the second word of thegSpriteBankTableheader.gSpriteBankTableitself is not graphics: it is the sprite-animation metadata plus an audio bank. That is why no LZ77/RL signature was ever found. - "The body is one dense 12-byte record array" (docs/rom_map.md,
gSpriteBankTable) is only true of 56 records. Past them come the per-bank animation/frame/piece tables (to0x084C0006), and then 638 KB of GAX2 audio. - "There is no separate sound-effect sample bank" (docs/audio.md)
was wrong.
0x084C0006-0x0855BCB4has the exact GAX2 instrument and sample-table layouts, with 87 samples and 88 instruments, and the 36-byte prefix of the built music block (thengax_header_prefix.bin) points into its tail (0x0855BC98). That prefix is the engine'ssfxTypesarray, so this set is the sound effects (confirmed from the matched engine code, see below). - Most of
games/xs/graphics/tileset1/*.binwere not graphics. Files27-60(all but21-26) were LZ77-packed level assets (per-room chunk streams,level_desc.assetwithassetPacked = 1, the same format as the seven raw ones). They are gone fromgames/xs/graphics/tileset1/now: the build re-encodes them from the rooms' decoded tilemaps ingames/xs/data/levels/and gbagfx packs them again (levels.md). Files23-26are BG tile sets used bybg_layer_desc.tileData, and could become PNGs like21/22. gActorCategories/64/84are one array. They are onecategory_descriptor[7], cut into three labels because code takes+0x0Cand+0x2Cliterals. Convert them together.
Nothing references this label directly. It is reached through the
category descriptors gActorCategories[0..2] (engine/include/engine/actor/actor_anim.h):
cellAnim = 0x0803B8B0, cellAnimSize = 0x75B94, and
sub_effect_table = 0x080B1444 for category 0. InitActorCategory
passes the first two to InitCellAnim (engine/src/engine/gfx/cell_anim.cpp).
That function reads a "cell record": a 256-colour palette (DMA'd whole to
0x05000000 by ResetCellAnimBg), s16 cols and rows at +0x200/+0x202,
then frames of cols*rows*32 bytes of 4bpp tiles. When the category type
is 0, each frame also carries ((cols*rows)+7)/8*4 bytes of side data.
UploadCellAnimFrame DMAs one frame per tick to BG0 and hands the side data to
the gDrawMirroredTilemapFunc callback. The frame count is (size - 0x204) / frameSize.
| Range | Size | Content | Effort |
|---|---|---|---|
0803B8B0 |
0x75B94 | palette[256], cols=19, rows=13, 60 frames x 8,028 B (7,904 B tiles + 124 B side data). 0x204 + 60*8028 = 0x75B94 exactly |
medium |
080B1444 |
0xCDC | category 0 sub_effect_record[164] (0x14 each, count in record 0's field_04) + a 12-byte terminator ({threshold, -1, ...}) |
easy |
Status: converted (engine/src/game/vehicles/polar/data/polar_cell_anim.cpp, see
data.md "Category backgrounds"). The side data turned out
to be one 4-bit palette bank per cell (low nibble first, 247 cells
padded to 124 bytes): drawn with those banks, every frame is a clean
picture. The animation is one 152x6240 indexed PNG
(games/xs/graphics/vehicles/polar/ice_wall.png, the 60 frames stacked,
each cell drawn in its bank), converted by grit, and the table is a
SUB_EFFECT_TABLE(164) of struct sub_effect_record.
gStaticData_080C0C36 (527,126 B): sub-effect tables, compressed frame sets, cell animation B, BG1 picture
Every region is reached through the category descriptors or an
animation-table table_B array:
| Range | Size | Content | Evidence | Effort |
|---|---|---|---|---|
080C0C36 |
2 | zero pad (gbagfx's padding of the .lz stream before it) |
done | |
080C0C38 |
0xDB8 | category 1 sub_effect_record[175] + 0xC |
descriptor 1 +0x14, count in record 0 |
easy |
080C19F0 |
0xD68 | category 2 sub_effect_record[171] + 0xC |
descriptor 2 +0x14 |
easy |
080C2758 |
0x17A80 | compressed frame set A: 152 back-to-back zero-run-compressed frames {8, 8, 0x30, 0} + run stream |
the 152 absolute pointers of table_B 0x0817941C (anim record 0 of categories 0-2, 148 distinct) all land on a frame header |
medium |
080DA1D8 |
0x24FD8 | compressed frame set B: 112 frames of 10x10 tiles | the 123 pointers of gYetiFrames (the CreateYeti singleton's table_B, 112 distinct) |
medium |
080FF1B0 |
0x3E784 | BG0 cell animation B: palette[256], cols=38, rows=10, 21 frames x 12,160 B (no side data, type != 0) | descriptors 3-6 +0x04/+0x08 = {0x080FF1B0, 0x3E784}; 0x204 + 21*12160 exact |
medium |
0813D934 |
0x3498 | BG1 picture (category 3, descriptor +0x0C) |
LoadBgPicture layout below; size exact |
medium |
08140DCC |
0x980 | category 3 sub_effect_record[121] + 0xC |
descriptor 3 +0x14; ends exactly at the 0814174C LZ77 sheet |
easy |
Status: the two tables are converted (engine/src/game/vehicles/polar/data/polar_spawn_tables.cpp),
and cell animation B, the category 3 picture and its table too
(engine/src/game/vehicles/jetpack/data/jetpack_cell_anim.cpp), and the two frame sets
(engine/src/game/vehicles/polar/data/polar_rle_sprites.cpp, see below). The pad at 080C0C36 is
built too: it is the zero padding gbagfx writes after the .lz stream
(docs/data.md, "LZ77 stream padding").
The BG1 picture format, from LoadBgPicture (bg_picture.cpp):
u16 palette[256], s16 cols @0x200, s16 rows @0x202,
u32 tiles @0x204, u16 map[cols*rows] padded to 4 bytes (((n+1)/2)*4),
tiles*32 bytes of 4bpp tiles, then (n+1)/2 bytes of palette-bank
nibbles (one per map entry). All three pictures (0813D934, 08151AC4,
08155260) end exactly at the next known structure. gbagfx can handle
the tiles, and a tiny packer can handle the header, map and nibbles.
The compressed frame sets (formerly "rotation strips"). Earlier
passes read every table_B target as a {w, h, 0x30, 0} header plus
w*h*32 raw tile bytes, the way LoadSpriteFrameTiles uploads a plain
frame. Read that way, consecutive frames overlapped ("sliding windows"
106-2,818 bytes apart), each header sat inside the previous window's
pixels, the last windows ran past each region's end, and the tiles came
out scrambled. The 0x30 byte is the clue: these frames are
compressed, and they are never passed to LoadSpriteFrameTiles.
The consumers (polar_player.cpp, jetpack_player_update.cpp,
company_logos.cpp) call gUnpackRleSpriteFrameFunc(vramBlock, frame).
That IWRAM variable is initialised by the crt0 copy of the IWRAM image
(0x087E55E4 + 0x874) to 0x03000634, an ARM routine in the same image.
Disassembled, it fills w*h*32 bytes of VRAM from a stream of u16
counts after the header: a count of zero halfwords (DMA3 fixed-source
fill from a zero on the stack), then alternately a literal count
followed by that many halfwords (DMA3 copy) and a zero count, until the
frame is full. (Its neighbour gLookupSpriteFrameCacheFunc = 0x030006FC, the
LoadSpriteFrameTiles hook, only looks the frame up in the VRAM frame
cache.) The frames are simply stored back to back, and decoding them in
order covers each region exactly, with no overlap and nothing past the
end:
| Set | Frames | Frame size | Distinct table_B targets |
Content (category palette bank 0) |
|---|---|---|---|---|
A 080C2758-080DA1D8 |
152 | 8x8 tiles | 148 of 152 pointers (4 frames unused) | Crash riding the polar bear |
B 080DA1D8-080FF1B0 |
112 | 10x10 tiles | 112 of 123 | the yeti |
C 0815A050-08167AD4 |
80 | 8x8 tiles | 80 of 80 | a boss-sized character (categories 3-6) |
The original encoder's rule is simple: every stretch of at least 7 zero halfwords is a zero run, shorter ones stay inside the literal run, and the leading zeros are always a zero run. Re-encoding the decoded frames with that rule gives all 344 frames byte for byte.
Status: converted. Each set is one 4bpp PNG in games/xs/graphics/vehicles/
(frames stacked top to bottom), built with grit and compressed again by
tools/rle_sprites.py, see docs/data.md "Compressed sprite frames".
The category data continued after the second LZ77 sheet, same formats as above:
| Range | Size | Content | Effort |
|---|---|---|---|
08151AC2 |
2 | zero pad (gbagfx's padding of the .lz stream before it) |
done |
08151AC4 |
0x2598 | BG1 picture, category 4 (38x16, 237 tiles) | medium |
0815405C |
0x1204 | category 4 sub_effect_record[230] + 0xC |
easy |
08155260 |
0x36B8 | BG1 picture shared by categories 5 and 6 (38x16, 374 tiles) | medium |
08158918 |
0x1718 | category 5 sub_effect_record[295] + 0xC |
easy |
0815A030 |
0x20 | category 6 sub_effect_record[1] + 0xC |
easy |
0815A050 |
0xDA84 | compressed frame set C, table_B 0x0817BA44 (anim record 0 of categories 3-6, 80 pointers), 80 frames of 8x8 tiles |
medium |
Status: the pictures and tables (08151AC4-0815A050) are converted
(engine/src/game/vehicles/jetpack/data/jetpack_sky_pictures.cpp), and so is frame set C
(engine/src/game/vehicles/jetpack/data/jetpack_rle_sprites.cpp). The pad at 08151AC2 is gbagfx's
padding of the .lz stream before it, like the one at 080C0C36.
The only direct reference is InitLanguageSelectGraphics reading the first 0x20 bytes
as a u16[16], like its three siblings just before it. Everything else
is reached through two pointer graphs.
1. Level data. The level table's room lists (after
gLevelTable) point at 48 room records of 0x14 bytes, 41 of
them rooms: {u16 (*palette)[256]; struct level_desc *desc; s32 kind; ...; union {blend; u16 catIndex} param @0x10} (now struct level_room in
engine/src/game/level/data/level_table.cpp). Every reader uses that struct
(level_layers.cpp's struct level_load_args, play_room.cpp's
gl_widget_kind, level_query.cpp's MedalListItem and play_room.cpp's
level_blend were views of it; desc->entities is the descriptor's object list). A room record is
the cat that RunRoom hands to LoadRoom.
Walking them:
struct level_desc(0x24):layerData[3],layer0Data,tileData(allbg_layer_desc *),asset,u8 assetPacked, and the two object lists passed toSpawnRoomEntities. The 41 descriptors sit at0824C400...08270BCC(33) and082B9ED0...082BEADC(8).struct bg_layer_desc(0x20,bg_layer.cpp):u16 *chunkGrid,u32 assetOffset(the streamers uselevel asset + assetOffsetas their decode base,tile_cache_cell.cpp/bg_streamer.cpp),tileData,scaleX,scaleY,cnt, grid width/height in chunks (+0x16/+0x18), size in tiles (+0x1A/+0x1C).tileDatais either one of the built LZ77 tile sets (made from the rooms' pictures, docs/levels.md "Tile sets"), or one of five tag-0x00 raw assets in this blob. The pooled layer 0 reads those attiles + 4, 64 bytes per tile, i.e. 8bpp (tile_slot_pool.cpp,SetTileSlotPoolSource).assetis either an LZ77 blob between the intro graphics (assetPacked = 1, formerlygames/xs/graphics/tileset1/27-60), or one of seven raw level assets ingRoom17Asset/gStaticData_086ECCD2(assetPacked = 0).
The full format (the object lists included) is in levels.md.
Status: converted. The blob is now five engine/src/*/data objects
(docs/data.md, "Raw tile pools"): the sprite banks are a PNG per frame
(games/xs/graphics/sprites/bankNN_<name>/, tools/sprite_frames.py), the five
tile sets are made by the build from the rooms' layer pictures
(docs/levels.md, "Tile sets"), the 125 OBJ palettes are JASC .pal files
(games/xs/graphics/sprites/palettes/, extracted by tools/gfx_manifest.py extract), and gLanguageSelectPalette3 is a C u16[16]. The
two room-data blocks (0824B638, 082B91D0) are typed C
(level_rooms_main_bonus.cpp, level_rooms_bosses_gem_paths.cpp) generated by
tools/levels.py from games/xs/data/levels/ (levels.md).
2. Sprite banks. The gSpriteBankTable header's second word is
0x082BF120, and GetSpriteTileBase returns it. sprite_renderer.cpp's
DrawPieces and DrawAffinePieces upload GetSpriteTileBase() + (frame.packed & 0xFFFFFF).
| Range | Size | Content | Evidence | Effort |
|---|---|---|---|---|
0817E78C |
0x20 | u16[16] |
InitLanguageSelectGraphics |
easy |
0817E7AC |
0x67B84 | level tile set 1: header 0x067B8000 (tag 0, 0x67B80 B), 6,638 8bpp tiles |
10 bg_layer_desc.tileData refs; ends exactly at the next asset |
medium |
081E6330 |
0x1AAC4 | level tile set 2 (0x1AAC0 B) | 10 refs; chains | medium |
08200DF4 |
0x4A844 | level tile set 3 (0x4A840 B) | 5 refs; chains | medium |
0824B638 |
0x258D0 | room data, 33 rooms: 256-colour BG palettes, level_desc, bg_layer_desc, u16 chunk grids, entity lists, parameter records, per-type counts, links |
every byte typed (levels.md) | done |
08270F08 |
0x28EC4 | level tile set 4 (0x28EC0 B) | 7 refs; chains | medium |
08299DCC |
0x1F404 | level tile set 5 (0x1F400 B) | 9 refs; ends where room block 2 starts | medium |
082B91D0 |
0x5F50 | room data, 8 rooms (same shapes) | done | |
082BF120 |
0x1E5540 | sprite tile pool: raw OBJ tiles, no header | see the next section: the 56 banks use disjoint, back-to-back tile ranges in bank order, and the last one ends at exactly +0x1E5540 |
medium |
084A4660 |
0xFA0 | 125 x 32-byte OBJ palettes (16 colours each) | header +0x08/+0x0E of gSpriteBankTable; InitLevelState/RunPauseMenu hand it to the palette cache, GetPaletteSlot copies one palette per paletteId |
easy |
Conversion. The sprite tile pool is plain tile data with known bank
boundaries. One 4bpp PNG per bank through gbagfx is a lossless round
trip (any byte string is valid 4bpp data; the pool is 61,994 whole
tiles), and it's viewable with a bank's palette. Banks drawn in 8bpp
(part flag 28) would look scrambled in a 4bpp view but still round-trip.
Doing this single step moves 24.7% of the data total. The five tile
sets are 8bpp PNG + a generated 4-byte tag header: another 14.1%.
The room blocks are pointer-dense typed data: they became generated C,
see levels.md.
This is the "master asset table" of docs/rom_map.md. Its structure,
from the matched readers (RunPauseMenu in pause_menu.cpp, GetSpriteTileBase/
GetSpriteFrame/GetSpriteAnimPaletteSlot/GetSpriteAnimPaletteId in sprite_obj.cpp,
sprite_renderer.cpp, and the **gSpriteBankSet + N users):
0x084A5600 header (0x10):
bank_record *banks = 0x084A5610
u8 *tileBase = 0x082BF120 (sprite tile pool, in 0817E78C)
u8 *palettes = 0x084A4660 (125 OBJ palettes)
u16 nbanks = 56, u16 paletteCount = 125
0x084A5610 bank_record[56] (12 B): { anim_record *anims; frame_desc **frames; u16 unk; u16 nanims; }
(every "**gSpriteBankSet + 0x27C"-style offset in engine/src/ is 12*N: bank N)
per bank, back to back:
anim_record[nanims] (0x1C): u16 *keyframes @0, two boxes @4/@0xC, u8 paletteId @0x14 (GetPaletteSlot id),
u8 duration @0x15, u8 frameCount @0x16, u8 flags @0x17 (bit 1 = loop)
u16 keyframes[] (frame indices, frameCount per anim)
frame_desc *frames[nframes]
frame_desc[nframes]: piece_offset *offsets; u8 *ids; u32 count<<24 | tileOffset;
then 0-3 boxes {s16 x, y; u8 w, h; u16 0} and an optional {s16 x, y} anchor
piece_offset[] (s16 x, s16 y), u8 ids[] (low nibble = OBJ shape/size index into 0816B2E0/0816B2EC)
A frame descriptor is not a fixed 0x18 bytes, as first noted here:
its size depends on the high nibble of its first piece byte (the
"layout type"), the same nibble GetSpriteAttackBox/GetSpriteBodyBox/
GetSpriteFrameAnchor/GetSpriteFrameThirdBox/GetSpriteFrameAttackBox/GetSpriteFrameBodyBox switch on to
pick a box or anchor off the frame. Type 1 has nothing after the 12-byte
header, types 2 and 5 one box, 6 a box and an anchor, 3 two boxes, 4
three, and 0 three boxes and an anchor (12 to 40 bytes). With those
sizes, a walk of all 56 banks (330 animations, 2,429 frames) covers
0x084A5600-0x084C0006 with nothing in between but 57 zero alignment
pads of 1-3 bytes; the "385 holes" of the first walk were the boxes and
anchors of a fixed 0x18-byte reading. The only irregularity is three
frames with no pieces (in banks 0, 42 and 47): 12-byte headers that
share the next frame's piece arrays and are directly followed by it.
The anim record's last word (+0x18), every box's last u16 and the
bank's unk are always 0. Bank 0 alone is 48 animations, 465 frames and 250 KB of tiles, probably
the player.
Status: converted to typed C: engine/src/engine/gfx/data/sprite_banks_00_09.cpp (the
header, the bank table and banks 0-9), sprite_banks_10_21.cpp (10-21),
sprite_banks_22_38.cpp (22-38) and sprite_banks_39_55.cpp (39-55),
with the structs in engine/include/engine/gfx/sprite_bank.h (struct sprite_bank_table,
sprite_bank, sprite_anim, sprite_frame and its five box/anchor
variants). Every pointer is a symbol reference; frame tile offsets and
the piece arrays are generated from games/xs/graphics/sprites/bankNN_<name>/ by
tools/sprite_frames.py (SPRITE_TILES_BANKnn_FRAMEkkk). tools/sprite_banks.py extracted the C once
from baserom.gba, checking the layout above as it goes. The files are
cut after banks whose piece bytes end on a word, because each C object
starts word-aligned. See docs/data.md.
0x084C0006-0x0855BCB4 is a second GAX2 data set in the same
formats docs/audio.md describes for music:
| Range | Size | Content |
|---|---|---|
084C0006 |
0x2 | zero pad to a word boundary |
084C0008 |
0x3B20 | 88 instruments, each envelope + 12-byte unknown block + rows + 0x8C header (0xAC in all) |
084C3B28 |
0x160 | instrument pointer table (88 entries) |
084C3C88 |
0x97D30 | 87 signed 8-bit PCM samples, byte-aligned (+3 B pad) |
0855B9B8 |
0x2C0 | sample table: 88 x {u8 *data, u32 length}, entry 0 empty |
0855BC78 |
0x3C | song header (0x1C: volume 0x100, the instrument and sample tables), a 1-entry NULL child-type array, and the handler type (init/unknown/play = GaxFxChannelInit/GaxFxChannelUnknown/GaxFxChannelPlay, 0x48-byte instances) |
The first reading (the "2 B pad + 0x20 B not yet modelled" and the "8-byte header" after the instruments) was off by one record: the 0x20 bytes are instrument 0's envelope, unknown block and row, and every instrument is laid out that way, exactly as in the music block.
Role: the sound effects. The built music block starts with a 36-byte
prefix that pointed at 0x0855BC98 nine times. It is
GaxSongHeader.sfxTypes: StartSong passes gGaxMusicData there
with numSfx = 3, so the engine's sound-effect voices are instances of the
handler type at 0x0855BC98, and its play function GaxFxChannelPlay plays
instruments from this set's tables. PlaySfx's table ids (1-87) are
instrument numbers in this set. docs/audio.md, "Sound effects", has the
whole path.
Status: converted. The set is built by tools/gax_audio.py --sfx from
games/xs/sound/gax_sfx_manifest.json (the instruments, in the music manifest's
format) and games/xs/sound/sfx_samples/01-87.wav, and the music block's
prefix is generated from the set's layout instead of the old verbatim
gax_header_prefix.bin. games/xs/data/data.s incbins the built
build/crashbandicootxs/sound/gax_sfx_data.bin as
gGaxSfxData. The samples are not deduplicated here (84 and 87
are the same bytes, stored twice), unlike the music's.
Each is a level_desc.asset with assetPacked = 0: the uncompressed form
of what games/xs/graphics/tileset1/27-60 hold LZ77-packed. The asset is the
"chunk stream" pack read by the custom RLE/delta decoders DecodeLayerChunk
(visual layers) and DecodeCollisionChunk (terrain cache, 16x8 u16 chunks). It
starts with a u16 offset table (offsets x 4). Each layer reads it at
asset + bg_layer_desc.assetOffset.
| Asset | Size | Room (level_desc) |
|---|---|---|
086C127C (gRoom17Asset) |
0x18A30 | 0825E7DC |
086ECCD4 (after 2 B pad) |
0x1B484 | 082BDF98 |
08708158 (gRoom19Asset) |
0x2F568 | 08260768 |
087376C0 (gRoom26Asset) |
0x1B684 | 0825BCDC |
08752D44 (gRoom27Asset) |
0x38064 | 0825A390 |
0878ADA8 (gRoom32Asset) |
0x31394 | 0824E104 |
087BC13C (gRoom33Asset) |
0x27AB0 | 0825233C (ends at the first vtable, 087E3BEC) |
Status: converted (the 2-byte pad at 086ECCD2 is gbagfx's padding
of the LZ77 asset before it). The chunk
streams are decoded into one tilemap per layer (games/xs/data/levels/<room>/),
and tools/levels.py re-encodes them byte for byte, the LZ77 ones
included: its encoder reproduces the original tool's token choices and
its leftover bytes. The built assets are C arrays under new
labels (gRoom15Asset, gRoom19Asset, ...) in
engine/src/game/level/data/level_assets.cpp. The format
and the encoder are in levels.md.
crt0.s DMA-copies (gIntrTable - IntrMain_Buffer) / 4 words
from here (__iwram_lma) to 0x03000000 at boot. Converted: the
image is now built from source and linked to run at 0x03000000
(games/xs/ldscript.txt's iwram section, stored in ROM with AT(...)):
IntrMain, the hand-written interrupt dispatcher (platform/gba/asm/intr_main.s),
ten ARM routines (engine/src/engine/util/string_arm.cpp, engine/src/engine/gfx/sprite_arm.cpp,
built with agbcp_arm_patched) and the initialised IWRAM globals
(engine/src/engine/sys/iwram_data.cpp, 540 bytes from 0x030007CC). The code counts
toward code progress, the globals toward data. The 0xFF fill from
0x087E5FCC is the linker's rom_fill section, excluded from data as
before. See docs/progress_report.md's "The IWRAM image" and
docs/matching/iwram-image.md.
The other 404 raw labels total 127,807 bytes. Most are cut exactly at
the address the code references, so each one is a single table with one
to a few consumers, and most already have an extern with a real type.
By kind (from tools/data_map.json):
| Kind | Labels | Bytes | Notes |
|---|---|---|---|
gcc 2.x vtables (087E3BEC-087E55C4) |
93 | 6,648 | {0, 0} then {s16 delta, s16 0, fn} slots. Every function is matched C, so these become .4byte 0, sub_X or C initialisers and relocate |
| function-pointer / pointer-to-member tables | 16 | 1,232 | 0816BF20 (42 act_pmf), 0816C6A4 (92 fn ptrs), 081756C4 (3 category_vtable), the actor_pmf tables in 0817A6B8-0817C4F8 |
| pointer tables | 11 | 272 | e.g. 0816AA20 (19 song pointers into the built audio), 0816C5A0, 0817E714 |
| palettes (16- or 256-colour BGR555) | 51 | 63,397 | 23 are the 256-colour palettes of the intro Mode-4 slides (085ADBD1...08619F51, each after 0-3 B of alignment pad; some entries have bit 15 set, so they can't round-trip through gbagfx .pal; converted as C u16 arrays, cutscene_pictures.cpp), plus 08175760 (32 palette-cycle frames x 0x1C0) and many 0x20 menu/HUD palettes |
| alignment padding | 67 | 133 | 1-3 zero bytes before a 4-aligned LZ77 blob, all between 085A5519 and 086EA0C9. Built: each one is the word alignment of the next stream, an aligned(4) C array (docs/data.md, "LZ77 stream padding") |
| other typed tables | 166 | 56,125 | s32/u16/struct tables with known consumers; notable ones below |
Notable mid-size tables:
0816C86C(0x514): the level table, 25 x 0x24 level records (the first word, 1, is record 0's name text id, not a header) + 25 room-list headers{count, rooms**, extra1, extra2}. It is declared under five different struct names acrossengine/src/(gl_level_entry,level_info,level_guard,MedalTableEntry,threshold_table_entry). Converted with the next one (engine/src/game/level/data/level_table.cpp,struct level_infoinlevel_data.h).0816CD80(0x474): 11 theme music cues, 17 extra-room records, the room-list pointer arrays and 31 more records (24 rooms, 7 category stages). It is the root of the level-data graph. Converted, except its last 0x2C bytes, which are the English cutscene text table (0816D1C8, see0816D1F4).0816D1F4(0x53B4): the cutscenes: slide lists, the text of six languages (tables, pages, strings), and the 24 slides (0x1C each) that point at the intro pictures (palette + bitmap). Converted (engine/src/game/ui/data/cutscenes.cpp,engine/src/game/ui/data/cutscene_pictures.cpp, docs/data.md "Cutscenes").08178F80(0x1738) /0817AA98(0x1728): the two actor-category families: palettes,table_Akeyframes,anim_table_record[41]/[47](081796CC/0817B2A4, already declared), and thetable_Barrays.docs/entities/*.jsonalready records all of it. Converted (engine/src/game/vehicles/polar/data/polar_anim_family.cpp,engine/src/game/vehicles/jetpack/data/jetpack_anim_family.cpp, docs/data.md "Category families").08175558+08175564+08175584: onecategory_descriptor[7], split over three labels.081725C4(0x261C): terrain shape records (36 B, heights 0-7,0xFFempty) for the collision streamer, then the game's UI text in six languages. Converted (engine/src/game/level/data/terrain_types.cpp,engine/src/game/ui/data/ui_text.cpp).0817C5D0(0x96C): popup/credits text opcode stream ("\x03developed by\n\n\x01..."). Converted (engine/src/game/ui/data/credits_text.cpp).0816AF10: the CRC-16/CCITT table (poly0x1021) for link-cable packets. Converted (engine/src/engine/link/data/link_crc_table.cpp).0816A820:s16[256]sine table. Converted (engine/src/game/bosses/data/boss_pictures.cpp).085A4C70/085A4D70: two copies of libgcc's__clz_tab(u8[256]). Converted (lib/libgcc/data/clz_tab.c).085A60FF...085A62CC: GAX2 version string ("GAX Sound Engine 2.01D (Sep 28 2001) (c) Shin'en Multimedia. Code: B.Wodok") and error strings, theRateEntrytable, and085A62DC, the GAX2u32period table (0x3BD0; its0x08xxxxxxvalues are a smooth ramp, not pointers). Converted, with the vibrato wave and the EEPROM library's data after it (lib/gax/data/gax_tables.c,lib/agb_eeprom/data/eeprom_data.c).
Every one of the 412 labels is listed in the appendix.
- Infrastructure first (small, unblocks everything). Teach
tools/report_units.pyto handle anything besides oneincbinper label. The easiest way is to take blob addresses and sizes from the linker map (crashbandicootxs.map) or the ELF symbol table, not from summinggames/xs/data/data.s. Todayparse_data_s()exits on any other line. A splitdata.sbreaks its address check too: the C experiment below tripped it. Also add a "source group" for typed data (.sdirectives orengine/src/*/data/*.c), so those units count as built. - Done. Sprite tile pool to PNGs (
082BF120, 1.99 MB, +24.7%). Split by bank (the ranges are exact and back to back), one 4bpp PNG each, no header. It needs a label split indata.s, agames/xs/graphics/sprites/directory, and the existing%.4bpprule. It is the best ratio by far. - Done (the five tag-0 sets;
tileset1/21-26too, asgames/xs/graphics/level_bg_tiles/, #914). Level tile sets to 8bpp PNGs (5 assets, 1.13 MB, +14.1%), with the 4-byte tag header generated by a one-line rule (size << 8). Convertgames/xs/graphics/tileset1/23-26(.bintoday) to PNG in the same pass for consistency. - BG0 cell animations and BG1 pictures (775 KB, +9.6%). One small packer tool for the two formats documented above.
- Done, decoded. Raw level assets (1.11 MB, +13.8%): decoded
into tilemaps and re-encoded by
tools/levels.pytogether with the 34 LZ77 ones (games/xs/graphics/tileset1/27-60before), not as.binpassthroughs. - Done. Second GAX2 data set (638 KB, +7.9%): extend
tools/gax_audio.py. - Small tables (128 KB, +1.6%, about 400 labels). Do the vtables and
function-pointer tables early, even though they are small. They are
the only data that pins code addresses, so converting them to
symbolic
.4byte sub_X/C initialisers is what lets code shift without breaking the ROM. Then the typed tables, in consumer-file batches. - Done (the sprite-bank table). Sprite-bank table (109 KB) and category family data
(
08178F80/0817AA98,sub_effect_recordtables): typed C with generators. The layouts are all known. - Room data (178 KB, done, +2.2%, generated C from
games/xs/data/levels/) and the compressed frame sets (304 KB, done, +3.8%, the old "rotation strips":tools/rle_sprites.py).
Steps 2-5 alone take data progress from 20.4% to about 83%.
Recommendation: C const arrays in engine/src/*/data/*.c, placed by
games/xs/ldscript.txt in ROM order, with typed .s directives as the fallback
for the cases below. C matches the standing "prefer structs" direction:
the structs already exist in engine/include/ and engine/src/, so the table and its
consumers share one definition, and function pointers are just the
function names.
The experiment (done in the worktree, then reverted, so no ROM-producing
file is changed): gObjPieceWidths/0816B2EC (the OBJ piece
width/height tables, u8[12] each) moved into engine/src/*/data/obj_piece_sizes.c
as const u8 arrays. games/xs/data/data.s got a second section
(.section .rodata.after_0816B2F8, "a") from the next label on.
games/xs/ldscript.txt got
data.o(.rodata); src/*/data/obj_piece_sizes.o(.rodata); data.o(.rodata.after_0816B2F8);.
Result: make compare said crashbandicootxs.gba: OK, with the
symbols at 0x0816B2E0/0x0816B2EC. engine/src/*/*.c is already globbed, so
the Makefile needed no change.
agbcc/ldscript constraints found along the way:
constdata goes to.rodata(non-constto.data, which the ldscript discards: always useconst). Function pointers becomeR_ARM_ABS32relocations against the Thumb symbol, so they relocate properly. Thumb symbols carry bit 0, so.4byte sub_Xgivessub_X|1.- Every C object needs its own ldscript slot, and
data.smust be cut into named sections around it. Each converted table (or run of adjacent tables) adds one.section .rodata.<next>indata.sand two ldscript lines. With hundreds of tables, the better fix is to splitdata.sinto one file per region/unit with matching ldscript entries (thegames/xs/data/*.sglob already builds them). - Alignment. An object's
.rodatais aligned to its strictest member. agbcc gives.align 2(4 bytes) to every struct-typed object and to every array initialised from a string literal (const u8 s[5] = "abcd"), but not to a scalar byte array written as a brace list. Labels at odd or 2-mod-4 addresses (0816B13A,0816C308,0816C35F, the 0x16- and 0x22-byte tables...) must therefore be scalar arrays, or stay in.s. - Struct padding. agbcc rounds every struct up to a multiple of 4
(
struct {u8 x, y, z;}is 4 bytes, so an array of 2 is 8). Tables with 3-, 6- or 22-byte records can't use a natural struct. Use flat scalar arrays or.s. - No two C objects can interleave with
data.sbytes in one section. Where a tiny odd table sits between two C-convertible ones, convert the run together or keep it in.s.
Use .s typed directives (.4byte sub_X, .2byte, .byte, .ascii,
.balign) for: alignment pads, odd-aligned byte tables, the vtables, if
C++-style vtables are awkward to spell in C (a flat
{s32 delta; void *fn}[] works fine in C too), and anything that is
really an opaque stream. Either way, report_units.py must learn about
the new source kind first (step 1 above).
Every source under games/xs/graphics/ and where the ROM has it, from
games/xs/graphics/manifest.json (docs/graphics.md, "The manifest"); the source
file names don't carry addresses. Regenerate it with
tools/gfx_manifest.py table. The level data's room records, assets and
BG tile sets are in levels.md.
| ROM | symbol | kind | source (games/xs/graphics/) |
|---|---|---|---|
0803B8B0 |
gCategoryFamily0CellAnim |
cell_anim | vehicles/polar/ice_wall.png |
080B2120 |
gPolarSpriteSheet |
framed_sheet | vehicles/polar/sprite_sheet/ |
080C2758 |
gPolarPlayerRleFrames |
rle_frames | vehicles/polar/player.png |
080DA1D8 |
gYetiRleFrames |
rle_frames | vehicles/polar/yeti.png |
080FF1B0 |
gCategoryFamily1CellAnim |
cell_anim | vehicles/jetpack/clouds.png |
0813D934 |
gCategory3BgPicture |
bg_picture | vehicles/jetpack/skies/rocket_racket.png, vehicles/jetpack/skies/rocket_racket_tiles.png |
0814174C |
gJetpackSpriteSheet |
framed_sheet | vehicles/jetpack/sprite_sheet/ |
08151AC4 |
gCategory4BgPicture |
bg_picture | vehicles/jetpack/skies/blimp_bonanza.png, vehicles/jetpack/skies/blimp_bonanza_tiles.png |
08155260 |
gCategory5BgPicture |
bg_picture | vehicles/jetpack/skies/no_fly_zone.png, vehicles/jetpack/skies/no_fly_zone_tiles.png |
0815A050 |
gJetpackPlayerRleFrames |
rle_frames | vehicles/jetpack/player.png |
08167AD4 |
gAirshipPalette |
palette | vehicles/jetpack/airship/frame0.png, vehicles/jetpack/airship/frame1.png ... (4 files) (its palette) |
08167CD4 |
gAirshipPicture |
boss_picture | vehicles/jetpack/airship/frame0.png, vehicles/jetpack/airship/frame1.png ... (4 files) |
08169AE8 |
gHovercraftPalette |
palette | bosses/hovercraft.png (its palette) |
08169CE8 |
gHovercraftPicture |
boss_picture | bosses/hovercraft.png |
08175760 |
gActorPaletteCycleFrames |
palette_cycle | vehicles/polar/palette_cycle/ |
08178F80 |
gPolarCategoryPalette |
palette | vehicles/polar/player.png (its palette) |
0817AA6C |
gYetiPalette |
palette | vehicles/polar/yeti.png (its palette) |
0817AAA4 |
gAirshipCategoryPalette |
palette | vehicles/jetpack/player.png (its palette) |
084A4660 |
gObjPalettes |
obj_palettes | sprites/palettes/ |
084A5600 |
gSpriteBankTable |
sprite_banks | sprites/ |
085A4E70 |
gSmallFontTiles |
tiles | fonts/small.png |
085A551C |
gLargeFontTiles |
tiles | fonts/large.png |
085A9F70 |
gCutscenePicture00 |
palette | cutscenes/00_space_station.png (its palette) |
085AA170 |
gCutscenePicture00Bitmap |
bitmap | cutscenes/00_space_station.png |
085ADBD4 |
gCutscenePicture01 |
palette | cutscenes/01_uka_uka_and_cortex.png (its palette) |
085ADDD4 |
gCutscenePicture01Bitmap |
bitmap | cutscenes/01_uka_uka_and_cortex.png |
085B34E4 |
gCutscenePicture02 |
palette | cutscenes/02_cortex.png (its palette) |
085B36E4 |
gCutscenePicture02Bitmap |
bitmap | cutscenes/02_cortex.png |
085B82BC |
gCutscenePicture03 |
palette | cutscenes/03_cortex_hologram.png (its palette) |
085B84BC |
gCutscenePicture03Bitmap |
bitmap | cutscenes/03_cortex_hologram.png |
085BC6E8 |
gCutscenePicture04 |
palette | cutscenes/04_minimizer_console.png (its palette) |
085BC8E8 |
gCutscenePicture04Bitmap |
bitmap | cutscenes/04_minimizer_console.png |
085C1938 |
gCutscenePicture05 |
palette | cutscenes/05_minimizer_beam.png (its palette) |
085C1B38 |
gCutscenePicture05Bitmap |
bitmap | cutscenes/05_minimizer_beam.png |
085C6750 |
gCutscenePicture06 |
palette | cutscenes/06_earth_shrinking.png (its palette) |
085C6950 |
gCutscenePicture06Bitmap |
bitmap | cutscenes/06_earth_shrinking.png |
085CB160 |
gCutscenePicture07 |
palette | cutscenes/07_cortex_on_monitors.png (its palette) |
085CB360 |
gCutscenePicture07Bitmap |
bitmap | cutscenes/07_cortex_on_monitors.png |
085CFECC |
gCutscenePicture08 |
palette | cutscenes/08_aku_aku_crash_and_coco.png (its palette) |
085D00CC |
gCutscenePicture08Bitmap |
bitmap | cutscenes/08_aku_aku_crash_and_coco.png |
085D6534 |
gCutscenePicture09 |
palette | cutscenes/09_cortex_holding_earth.png (its palette) |
085D6734 |
gCutscenePicture09Bitmap |
bitmap | cutscenes/09_cortex_holding_earth.png |
085DB768 |
gCutscenePicture10 |
palette | cutscenes/10_aku_aku.png (its palette) |
085DB968 |
gCutscenePicture10Bitmap |
bitmap | cutscenes/10_aku_aku.png |
085DFABC |
gCutscenePicture11 |
palette | cutscenes/11_cortex_on_screen.png (its palette) |
085DFCBC |
gCutscenePicture11Bitmap |
bitmap | cutscenes/11_cortex_on_screen.png |
085E550C |
gCutscenePicture12 |
palette | cutscenes/12_coco_on_screen.png (its palette) |
085E570C |
gCutscenePicture12Bitmap |
bitmap | cutscenes/12_coco_on_screen.png |
085EAC44 |
gCutscenePicture13 |
palette | cutscenes/13_minimizer_overload.png (its palette) |
085EAE44 |
gCutscenePicture13Bitmap |
bitmap | cutscenes/13_minimizer_overload.png |
085F0368 |
gCutscenePicture14 |
palette | cutscenes/14_bosses_shocked.png (its palette) |
085F0568 |
gCutscenePicture14Bitmap |
bitmap | cutscenes/14_bosses_shocked.png |
085F4CC4 |
gCutscenePicture15 |
palette | cutscenes/15_monster.png (its palette) |
085F4EC4 |
gCutscenePicture15Bitmap |
bitmap | cutscenes/15_monster.png |
085FA1D4 |
gCutscenePicture16 |
palette | cutscenes/16_monster_and_crash.png (its palette) |
085FA3D4 |
gCutscenePicture16Bitmap |
bitmap | cutscenes/16_monster_and_crash.png |
085FF77C |
gCutscenePicture17 |
palette | cutscenes/17_crash_flying_to_station.png (its palette) |
085FF97C |
gCutscenePicture17Bitmap |
bitmap | cutscenes/17_crash_flying_to_station.png |
086039B4 |
gCutscenePicture18 |
palette | cutscenes/18_coco_at_enlarger.png (its palette) |
08603BB4 |
gCutscenePicture18Bitmap |
bitmap | cutscenes/18_coco_at_enlarger.png |
08608A50 |
gCutscenePicture19 |
palette | cutscenes/19_earth_growing.png (its palette) |
08608C50 |
gCutscenePicture19Bitmap |
bitmap | cutscenes/19_earth_growing.png |
0860D578 |
gCutscenePicture20 |
palette | cutscenes/20_earth_beam_ring.png (its palette) |
0860D778 |
gCutscenePicture20Bitmap |
bitmap | cutscenes/20_earth_beam_ring.png |
08611BDC |
gCutscenePicture21 |
palette | cutscenes/21_station_exploding.png (its palette) |
08611DDC |
gCutscenePicture21Bitmap |
bitmap | cutscenes/21_station_exploding.png |
08616360 |
gCutscenePicture22 |
palette | cutscenes/22_reversed_beam.png (its palette) |
08616560 |
gCutscenePicture22Bitmap |
bitmap | cutscenes/22_reversed_beam.png |
08619F54 |
gCutscenePicture23 |
palette | cutscenes/23_legal_notice.png (its palette) |
0861A154 |
gCutscenePicture23Bitmap |
bitmap | cutscenes/23_legal_notice.png |
0861BADC |
gMenuSkyBgPalette |
palette | menus/sky.png (its palette) |
0861BB04 |
gPauseMenuBgPalette |
palette | menus/pause.png (its palette) |
0861BD48 |
gLevelSelectPageBgPalette |
palette | level_select/platform.png (its palette) |
0861BF30 |
gContinuePromptSmokeBgPalette |
palette | menus/continue_prompt/smoke.png (its palette) |
0861BF58 |
gContinuePromptGlowBgPalette |
palette | menus/continue_prompt/glow.png (its palette) |
0861BF80 |
gContinuePromptUkaUkaBgPalette |
palette | menus/continue_prompt/uka_uka.png (its palette) |
0861C15C |
gTitleBandicootObjPalette |
palette | title/bandicoot.png (its palette) |
0861C184 |
gTitleCrashObjPalette |
palette | title/crash.png (its palette) |
0861C1AC |
gTitleArrow1ObjPalette |
palette | title/arrow1.png (its palette) |
0861C1D4 |
gTitleArrow2ObjPalette |
palette | title/arrow2.png (its palette) |
0861C1FC |
gUniversalLogoBgPalette |
palette | logos/universal.png, logos/universal_high.json (its palette) |
0861C224 |
gTitleScreenBgPalette |
palette | title/logo.png (its palette) |
0861C30C |
gMenuSkyBgTiles |
bg_package | menus/sky.png |
0861E5F8 |
gPauseMenuBgTiles |
bg_package | menus/pause.png |
0862556C |
gLevelSelectPageBgTiles |
bg_package | level_select/platform.png |
08628C50 |
gContinuePromptSmokeBgTiles |
bg_package | menus/continue_prompt/smoke.png |
0862A958 |
gContinuePromptGlowBgTiles |
bg_package | menus/continue_prompt/glow.png |
0862B34C |
gContinuePromptUkaUkaBgTiles |
bg_package | menus/continue_prompt/uka_uka.png |
0862C2C8 |
gTitleBandicootObjTiles |
bg_package | title/bandicoot.png |
0862C4B0 |
gTitleCrashObjTiles |
bg_package | title/crash.png |
0862CC3C |
gTitleArrow1ObjTiles |
bg_package | title/arrow1.png |
0862CE70 |
gTitleArrow2ObjTiles |
bg_package | title/arrow2.png |
0862D0CC |
gUniversalLogoBgTiles |
bg_package | logos/universal.png, logos/universal_high.json |
0862E3B0 |
gTitleScreenBgTiles |
bg_package | title/logo.png |
0862FB24 |
gMenuSkyBgMap |
map | menus/sky.png (its map) |
0862FFF4 |
gPauseMenuBgMap |
map | menus/pause.png (its map) |
0863053C |
gLevelSelectPageBgMap |
map | level_select/platform.png (its map) |
086308F0 |
gContinuePromptSmokeBgMap |
map | menus/continue_prompt/smoke.png (its map) |
08630E1C |
gContinuePromptGlowBgMap |
map | menus/continue_prompt/glow.png (its map) |
08631158 |
gContinuePromptUkaUkaBgMap |
map | menus/continue_prompt/uka_uka.png (its map) |
08631374 |
gTitleBandicootObjMap |
map | title/bandicoot.png (its map) |
086313B0 |
gTitleCrashObjMap |
map | title/crash.png (its map) |
086314F0 |
gTitleArrow1ObjMap |
map | title/arrow1.png (its map) |
08631558 |
gTitleArrow2ObjMap |
map | title/arrow2.png (its map) |
086315BC |
gUniversalLogoBgMap |
map | logos/universal.png, logos/universal_high.json (its map) |
0863183C |
gTitleScreenBgMap |
map | title/logo.png (its map) |
086319A0 |
gCreditsRedEyeStudiosLogoPalette |
palette | logos/credits/red_eye_studios.png (its palette) |
086319C8 |
gCreditsShinenLogoPalette |
palette | logos/credits/shinen.png (its palette) |
086319F0 |
gCreditsCosmigoLogoPalette |
palette | logos/credits/cosmigo.png (its palette) |
08631A18 |
gCreditsUniversalLogoPalette |
palette | logos/credits/universal.png (its palette) |
08631A40 |
gCreditsVvLogoPalette |
palette | logos/credits/vicarious_visions.png (its palette) |
08631A68 |
gVvLogoEmblemPalette |
palette | logos/vicarious_visions/emblem.png (its palette) |
08631A90 |
gVvLogoLettersPalette |
palette | logos/vicarious_visions/letters.png (its palette) |
08631AB8 |
gVvLogoUrlPalette |
palette | logos/vicarious_visions/url.png (its palette) |
08631ACC |
gCreditsRedEyeStudiosLogoTiles |
tiles | logos/credits/red_eye_studios.png |
086324B4 |
gCreditsShinenLogoTiles |
tiles | logos/credits/shinen.png |
08632820 |
gCreditsCosmigoLogoTiles |
tiles | logos/credits/cosmigo.png |
08632BC4 |
gCreditsUniversalLogoTiles |
tiles | logos/credits/universal.png |
086334C4 |
gCreditsVvLogoTiles |
tiles | logos/credits/vicarious_visions.png |
08634270 |
gVvLogoEmblemTiles |
tiles | logos/vicarious_visions/emblem.png |
08636EF4 |
gVvLogoLettersTiles |
tiles | logos/vicarious_visions/letters.png |
08637604 |
gVvLogoUrlTiles |
tiles | logos/vicarious_visions/url.png |
086377C0 |
gLevelSelectCursorZoomTiles |
tiles | level_select/cursor_zoom.png |
08637A70 |
gLevelSelectPicture0Tiles |
tiles | level_select/pictures/snow.png |
086382C8 |
gLevelSelectPicture1Tiles |
tiles | level_select/pictures/jungle.png |
08638D68 |
gLevelSelectPicture4Tiles |
tiles | level_select/pictures/sky.png |
0863945C |
gLevelSelectPicture2Tiles |
tiles | level_select/pictures/sewer.png |
08639D18 |
gLevelSelectPicture5Tiles |
tiles | level_select/pictures/space.png |
0863A60C |
gLevelSelectPicture3Tiles |
tiles | level_select/pictures/underwater.png |
0863AD90 |
gLevelSelectPicture9Tiles |
tiles | level_select/pictures/neo_cortex.png |
0863B668 |
gLevelSelectPicture7Tiles |
tiles | level_select/pictures/dingodile.png |
0863BDD4 |
gLevelSelectPicture8Tiles |
tiles | level_select/pictures/n_gin.png |
0863C5E4 |
gLevelSelectPicture6Tiles |
tiles | level_select/pictures/tiny.png |
0863CF98 |
gLevelSelectPicture0Palette |
palette | level_select/pictures/snow.png (its palette) |
0863D01C |
gLevelSelectPicture1Palette |
palette | level_select/pictures/jungle.png (its palette) |
0863D0A0 |
gLevelSelectPicture4Palette |
palette | level_select/pictures/sky.png (its palette) |
0863D124 |
gLevelSelectPicture2Palette |
palette | level_select/pictures/sewer.png (its palette) |
0863D1A8 |
gLevelSelectPicture5Palette |
palette | level_select/pictures/space.png (its palette) |
0863D22C |
gLevelSelectPicture3Palette |
palette | level_select/pictures/underwater.png (its palette) |
0863D2B0 |
gLevelSelectPicture9Palette |
palette | level_select/pictures/neo_cortex.png (its palette) |
0863D334 |
gLevelSelectPicture7Palette |
palette | level_select/pictures/dingodile.png (its palette) |
0863D3B8 |
gLevelSelectPicture8Palette |
palette | level_select/pictures/n_gin.png (its palette) |
0863D43C |
gLevelSelectPicture6Palette |
palette | level_select/pictures/tiny.png (its palette) |
One row per baserom.gba incbin in games/xs/data/data.s, in ROM order. The
consumers are the C functions that load the label's address (or, for
the composites, the functions that reach it through pointers). Composite
blobs are split into regions in the sections above and in
tools/data_map.json. Element counts come from the size and the
extern type where one exists. Hand-written formats are shown as
written; the rest come from the classifier (pointer, palette and
vtable shapes).
| Address | Size | Format | Consumers | Conf. | Effort |
|---|---|---|---|---|---|
0803B8B0 |
0x76870 | composite: BG0 streamed cell animation A + category-0 sub-effect table. Converted (engine/src/game/vehicles/polar/data/polar_cell_anim.cpp) |
InitCellAnim, UploadCellAnimFrame, ResetCellAnimBg +2 |
high | done |
080C0C36 |
0x80B16 | composite: sub-effect tables, two compressed OBJ frame sets, BG0 cell animation B, BG1 picture. Converted, the 2-byte pad as gbagfx's padding of 00_0b2120.bin.lz |
SelectActorCategory, GetAnimFrameData, InitCellAnim +2 |
high | done |
08151AC2 |
0x16012 | composite: BG1 pictures, sub-effect tables, compressed OBJ frame set C (categories 3-6). Converted, the 2-byte pad as gbagfx's padding of 01_14174c.bin.lz |
SelectActorCategory, GetAnimFrameData, LoadBgPicture |
high | done |
08167AD4 |
0x200 | the jetpack stages' airship (the green blimp): 16-colour palette (+ zero to 0x200). Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
LoadAirshipGraphics, ConvertAirshipTiles |
high | done |
08167CD4 |
0x1E14 | the airship's picture: {cols 18, rows 12}, 4 frames of {tile count, u16 map, 4bpp tiles} sharing one pool (games/xs/graphics/vehicles/jetpack/airship/, tools/boss_pictures.py). Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
CreateAirship |
medium | done |
08169AE8 |
0x200 | N. Gin's hovercraft: palette (16 colours + 240 x 0x03E0). Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
UpdateHovercraftHitFlash, LoadHovercraftGraphics, ConvertHovercraftTiles |
high | done |
08169CE8 |
0xB28 | N. Gin's hovercraft picture: {cols 16, rows 10}, 1 frame (games/xs/graphics/bosses/hovercraft.png). Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
CreateHovercraft |
medium | done |
0816A810 |
0x10 | u8[16] d-pad direction lookup. Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
GetDpadDirection |
medium | done |
0816A820 |
0x200 | s16[256] sine/direction table (s16 x 256). Converted (engine/src/game/bosses/data/boss_pictures.cpp) |
DrawPlayer, UpdateEnemyOscillateX, UpdateEnemyBob +16 |
high | done |
0816AA20 |
0x4C | song table: 19 pointers into the music block, gGaxMusicData + GAX_SONG_<NAME> from the generated gax_songs.h. Converted (engine/src/engine/audio/data/song_table.cpp) |
StartSong |
high | done |
0816AF10 |
0x228 | CRC-16/CCITT lookup table (poly 0x1021, u16[256]) + the two link-cable pairing names "crash 1 <-> crash 2"/"crash 1 <-> crash 3" (gCrash2LinkText/0816B124, which the IWRAM data gCrash2LinkTextPtr/0814 points at). Converted (engine/src/engine/link/data/link_crc_table.cpp) |
MakeLinkHandshakeId, HandleLinkSerial |
high | done |
0816B138 |
0x2 | the text ">". Converted (engine/src/game/ui/data/menu_tables.cpp) |
DrawYesNoPrompt |
medium | done |
0816B13A |
0x20 | table of u16; 1 word(s) look like ROM pointers (u16 x 16). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitSaveMenuIcons |
high | done |
0816B15A |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitSaveMenuIcons |
high | done |
0816B17A |
0x20 | table of u16 (u16 x 16). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitSaveMenuIcons |
high | done |
0816B19A |
0x22 | table of u16 (u16 x 17). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitSaveMenuIcons |
high | done |
0816B1BC |
0x14 | table of s32 (s32 x 5). Converted (engine/src/game/ui/data/menu_tables.cpp) |
DrawSaveMenuMain |
high | done |
0816B1D0 |
0x14 | table of void* (void* x 5). Converted (engine/src/game/ui/data/menu_tables.cpp) |
DrawPauseMenuPageTitle |
high | done |
0816B1E4 |
0x8 | table of struct icon_pos. Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPauseCrystalsPage, DrawPauseCrystalsPage |
high | done |
0816B1EC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPausePowersPage |
high | done |
0816B20C |
0x10 | table of u32 (u32 x 4). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPausePowersPage |
high | done |
0816B21C |
0x28 | table of struct icon_pos. Converted (engine/src/game/ui/data/menu_tables.cpp) |
DrawPauseGemsPage, InitPauseGemsPage |
high | done |
0816B244 |
0x14 | table of u32 (u32 x 5). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPauseGemsPage |
high | done |
0816B258 |
0x18 | table of struct icon_pos. Converted (engine/src/game/ui/data/menu_tables.cpp) |
DrawPauseRelicsPage, InitPauseRelicsPage |
high | done |
0816B270 |
0xC | table of u32 (u32 x 3). Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPauseRelicsPage, InitPauseTimeTrialPage |
high | done |
0816B27C |
0x8 | table of struct icon_pos. Converted (engine/src/game/ui/data/menu_tables.cpp) |
InitPauseTimeTrialPage, DrawPauseTimeTrialPage |
high | done |
0816B284 |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | InitPauseMenu |
medium | easy |
0816B298 |
0x28 | table (element layout: see consumers). Converted (engine/src/game/ui/data/pause_menu_rows.cpp) |
InitPauseMenu |
medium | done |
0816B2C0 |
0x20 | table (element layout: see consumers). Converted (engine/src/game/ui/data/pause_menu_rows.cpp) |
RunPauseMenu |
medium | done |
0816B2E0 |
0xC | table (element layout: see consumers). Converted (engine/src/engine/gfx/data/obj_piece_sizes.cpp) |
DrawSpritePieces, DrawAffineSpritePieces |
medium | done |
0816B2EC |
0xC | table (element layout: see consumers). Converted (engine/src/engine/gfx/data/obj_piece_sizes.cpp) |
DrawSpritePieces, DrawAffineSpritePieces |
medium | done |
0816B2F8 |
0x8 | all zero (zero-initialised table). Converted (engine/src/engine/gfx/data/obj_piece_sizes.cpp) |
QueueCratePlayerCollision, GetSpriteAttackBox, GetSpriteBodyBox +3 |
high | done |
0816B300 |
0x4 | all zero (zero-initialised table). Converted (engine/src/engine/gfx/data/obj_piece_sizes.cpp) |
GetSpriteFrameAnchor, CollidePlayer, ActionCtrlHandleEvent +1 |
high | done |
0816B304 |
0x318 | 44 {s32, s32, s32} motion records + 33 {a, b} entry pairs (gActionCtrlMotionEntries, gActionCtrlMotionSet's entries). Converted (engine/src/game/crash/data/motion_records.cpp) |
StartCtrlTargetMotionYFromSet, StartCtrlTargetMotionXFromSet, ApplyActionCtrlMotion |
high | done |
0816B61C |
0x2A4 | 31 {s32, s32, s32} motion records + 38 {a, b} entry pairs (gSwimCtrlMotionEntries, gSwimCtrlMotionSet's entries). Converted (engine/src/game/crash/data/motion_records.cpp) |
ApplySwimCtrlMotion, StartSwimCtrlMotionYFromSet, StartSwimCtrlMotionXFromSet |
high | done |
0816B8C0 |
0x6C | table (element layout: see consumers). Converted (engine/src/game/crash/data/motion_records.cpp) |
ApplyInputCtrlMotion |
medium | done |
0816B92C |
0x8 | pointer table (1 data pointers) | PlayRoom |
high | easy |
0816B934 |
0x8 | pointer table (1 data pointers) | PlayRoom |
high | easy |
0816B93C |
0x50 | entry set {entries, 0x100} + its 9 {a, b} entries (gInputCtrlMotionEntries). Converted (engine/src/game/crash/data/input_ctrl_motion_set.cpp) |
PlayRoom |
medium | done |
0816B98C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnLizard, SpawnVulture, SpawnVenusFlytrap +22 |
medium | done |
0816B9AC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnPenguin |
high | done |
0816B9CC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnPufferfish |
high | done |
0816B9EC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnBlowgunTribesman |
high | done |
0816BA0C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnVenusFlytrap |
medium | done |
0816BA2C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnVulture |
medium | done |
0816BA4C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnShark |
medium | done |
0816BA6C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnSquid |
medium | done |
0816BA8C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnElectricEel |
medium | done |
0816BAAC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnFlamethrowerLabAssistant |
high | done |
0816BACC |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnStationarySpaceEnemy |
medium | done |
0816BAEC |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnPatrollingSpaceEnemy |
high | done |
0816BB0C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnPatrollingSewerEnemy, SpawnFrog |
medium | done |
0816BB2C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnPistonCrusher, SpawnWoodenCrusher |
medium | done |
0816BB4C |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/enemies/data/enemy_anim_maps.cpp) |
SpawnSaucerLabAssistant |
high | done |
0816BB6C |
0x28 | entry set {entries, 0x100} + its 4 {a, b} entries (gEnemyCtrlMotionEntries). Converted (engine/src/game/crates/data/crate_tables.cpp) |
ResetEnemyCtrl |
medium | done |
0816BB94 |
0x4 | small constant (281e140a). Converted (engine/src/game/crates/data/crate_tables.cpp) |
UpdateSlotCrate, CreateCrate |
medium | done |
0816BB98 |
0x16 | table (element layout: see consumers). Converted (engine/src/game/crates/data/crate_tables.cpp) |
OpenCheckpointCrate, BreakCrate, ExplodeCrate |
medium | done |
0816BBAE |
0x16 | table (element layout: see consumers). Converted (engine/src/game/crates/data/crate_tables.cpp) |
BlastNearbyCrates, BreakCratesInArea, IsCrateKindBreakable |
medium | done |
0816BBC4 |
0x16 | table (element layout: see consumers). Converted (engine/src/game/crates/data/crate_tables.cpp) |
BreakCrateTouchedByPlayer, DropCratesAbove, BlastNearbyCrates +3 |
medium | done |
0816BBDA |
0x16 | table (element layout: see consumers). Converted (engine/src/game/crates/data/crate_tables.cpp) |
QueueCratePlayerCollision, BreakCrateInStack |
medium | done |
0816BBF0 |
0xA8 | table of s32 (s32 x 42). Converted (engine/src/game/crates/data/crate_tables.cpp) |
QueueCratePlayerCollision |
high | done |
0816BC98 |
0x268 | table of s32[7] (s32[7] x 22). Converted (engine/src/game/crates/data/crate_tables.cpp) |
QueueCratePlayerCollision, ApplyCrateCollision |
high | done |
0816BF00 |
0x8 | gAttackKindBreakLimited: a flag per attack kind (only kind 2), whether its crate breaks go through the player's countdown limiter. Converted (engine/src/game/crates/data/crate_tables.cpp) |
QueueCratePlayerCollision |
medium | done |
0816BF08 |
0xC | table of s32 (s32 x 3). Converted (engine/src/game/crates/data/crate_tables.cpp) |
UpdateExtraLifeHop |
high | done |
0816BF14 |
0xC | table of struct three_words. Converted (engine/src/game/crates/data/crate_tables.cpp) |
UpdateWumpaHop |
high | done |
0816BF20 |
0x150 | pointer-to-member dispatch table: 42 x {0xFFFF0000, fn} (struct act_pmf x 42) |
UpdateActionCtrl |
high | easy |
0816C070 |
0x20 | pointer table (8 data pointers) (struct level_anim* x 8) |
UpdateSwimCtrl, SwimCtrlStateTurn, SwimCtrlStateStop +2 |
high | easy |
0816C090 |
0x1C0 | struct speed_table (8 s32, gSwimCtrlTurnSpeeds: speedX per frame of the swim turn) + struct level_anim[8][13] (gSwimCtrlModeLevelAnims, the rows gSwimCtrlModeAnimRows points at). Converted (engine/src/game/crash/data/swim_speeds.cpp) |
StartSwimCtrlStroke |
high | done |
0816C250 |
0x40 | function-pointer / pointer-to-member table (8 code pointers) | UpdateSwimCtrl |
high | easy |
0816C290 |
0x40 | table of struct pmf; 4 word(s) look like ROM pointers | UpdateInputCtrl |
high | easy |
0816C2D0 |
0x8 | pointer table (1 data pointers) | ResetMegaMixCtrl |
high | easy |
0816C2D8 |
0x30 | table (element layout: see consumers). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
SetMegaMixMotionYFromSet, SetMegaMixMotionXFromSet, StartMegaMixMotionYFromSet +1 |
medium | done |
0816C308 |
0x3 | small constant (040100). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateTiny, SetTinyState |
medium | done |
0816C30B |
0x4D | table (element layout: see consumers). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
PickTinyHopTarget |
medium | done |
0816C358 |
0x4 | small constant (100e0a20). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
SetCortexTargetDest |
medium | done |
0816C35C |
0x3 | small constant (181612). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateCortexTarget |
medium | done |
0816C35F |
0x3 | small constant (040404). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateCortexTarget |
medium | done |
0816C362 |
0x6 | small constant (020202000000). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateCortexTarget |
medium | done |
0816C368 |
0x10 | table of s32 (s32 x 4). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodile |
high | done |
0816C378 |
0x18 | table of s32 (s32 x 6). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodile |
high | done |
0816C390 |
0x10 | table of s32 (s32 x 4). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodile |
high | done |
0816C3A0 |
0x18 | table of s32 (s32 x 6). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodile |
high | done |
0816C3B8 |
0x30 | table of s32 (s32 x 12). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodileShark, StartDingodileMotion |
high | done |
0816C3E8 |
0xC | table (element layout: see consumers). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodileProjectile |
medium | done |
0816C3F4 |
0x24 | table (element layout: see consumers). Converted (engine/src/game/bosses/data/boss_motion_tables.cpp) |
UpdateDingodileProjectile |
medium | done |
0816C418 |
0x40 | table of struct vec_pair | StartDingodileMotion |
high | easy |
0816C458 |
0x8 | pointer table (1 data pointers) | CreatePlatformMover |
high | easy |
0816C460 |
0x24 | table of struct speed_ramp (was struct vec3). Converted (engine/src/game/objects/data/platform_mover_motion.cpp) |
UpdatePlatformMover, SetPlatformMoverMotionYFromSet, SetPlatformMoverMotionXFromSet +2 |
high | done |
0816C484 |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | LoadSaveMenuBg, InitPowerDialog, InitLevelSelect +1 |
medium | easy |
0816C498 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4A0 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4A8 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4B0 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4B8 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4C0 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect, DrawLevelSelectTime |
high | done |
0816C4C8 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4D0 |
0x8 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect |
high | done |
0816C4D8 |
0x30 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
LevelSelectTurnPage, PlaceLevelSelectEntries |
high | done |
0816C508 |
0x30 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_layout.cpp) |
LevelSelectTurnPage, PlaceLevelSelectEntries |
high | done |
0816C538 |
0x10 | table of u32 (u32 x 4). Converted (engine/src/game/ui/data/level_select_layout.cpp) |
LevelSelectTurnPage, SetLevelSelectEntryBoxes |
high | done |
0816C548 |
0x10 | table of u32 (u32 x 4). Converted (engine/src/game/ui/data/level_select_layout.cpp) |
InitLevelSelect, RefreshLevelSelectPage |
high | done |
0816C558 |
0x14 | table of u32 (u32 x 5). Converted (engine/src/game/ui/data/level_select_layout.cpp) |
LoadLevelSelectRecord |
high | done |
0816C56C |
0x20 | table (element layout: see consumers). Converted (engine/src/game/ui/data/level_select_layout.cpp) |
RunLevelSelect |
medium | done |
0816C58C |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | CreateLevelSelectPageBg |
medium | easy |
0816C5A0 |
0x50 | pointer table (20 data pointers) | UpdateZoomBg |
high | easy |
0816C5F0 |
0x20 | table of struct xy_pair. Converted (engine/src/game/ui/data/level_select_anims.cpp) |
InitZoomBg |
high | done |
0816C610 |
0x14 | table of u32 (u32 x 5). Converted (engine/src/game/ui/data/level_select_anims.cpp) |
SetLevelSelectEntryBox |
high | done |
0816C624 |
0x10 | table of u32 (u32 x 4). Converted (engine/src/game/ui/data/level_select_anims.cpp) |
SetLevelSelectEntryLevel |
high | done |
0816C634 |
0x10 | table of u32 (u32 x 4). Converted (engine/src/game/ui/data/level_select_anims.cpp) |
UpdateLevelSelectCursor |
high | done |
0816C644 |
0x30 | table of s32 (s32 x 12). Converted (engine/src/game/ui/data/level_select_anims.cpp) |
FitScaledSprite, DrawScaledSprite |
high | done |
0816C674 |
0x30 | table of s32 (s32 x 12). Converted (engine/src/game/ui/data/level_select_anims.cpp) |
FitScaledSprite, DrawScaledSprite |
high | done |
0816C6A4 (gEntitySpawnFuncs) |
0x170 | function-pointer table: 92 Thumb function pointers (menu/trigger-effect dispatch) (void (*)(void) x 92) |
CreateEntitySpawner |
high | easy |
0816C814 (gThemePaletteCycle2) |
0xA | u16[5] palette-entry list of a level-start colour cycle. Converted (engine/src/game/level/data/level_table.cpp) |
RunRoom |
high | done |
0816C81E (gThemePaletteCycle1A) |
0x12 | u16[9] colour-cycle list. Converted (same) |
RunRoom |
high | done |
0816C830 (gThemePaletteCycle1B) |
0x12 | u16[9] colour-cycle list. Converted (same) |
RunRoom |
high | done |
0816C842 (gThemePaletteCycle3) |
0x20 | u16[16] colour-cycle list (palette entries 0x20-0x2F, not a palette). Converted (same) |
RunRoom |
high | done |
0816C862 (gThemePaletteCycle5) |
0xA | u16[5] colour-cycle list. Converted (same) |
RunRoom |
high | done |
0816C86C (gLevelTable) |
0x514 | level table: 25 x 0x24 struct level_info, then 25 x 0x10 room lists {count, rooms**, extra1, extra2}. Converted (same) |
InitPauseMenuInfo, InitPauseTimeTrialPage, CountPlatinumRelics +17 |
high | done |
0816CD80 (gThemeMusicCues) |
0x474 | u8[11] theme music cues, 17 room records (0x14 each), the room lists' pointer arrays, 31 more room records. Converted (same); its last 0x2C bytes are the English cutscene table 0816D1C8 |
PlayRoomMusic |
high | done |
0816D1F4 (gCutscenes) |
0x53B4 | the cutscenes: 11 slide lists {slides*, count} (struct cutscene_slides), the English pages, 5 more language tables, slide arrays, text strings and pointer arrays of 6 languages, 24 slides (0x1C, struct cutscene_slide). Converted (engine/src/game/ui/data/cutscenes.cpp, from 0816D1C8) |
PlayCutscene |
high | done |
081725A8 (gTerrainTypes) |
0x4 | 51 struct terrain_type {u8 modeValue[4]; u8 heights[4][8]} (the rest of the old blob is the UI text, see 081725C4). Converted (engine/src/game/level/data/terrain_types.cpp) |
GetSolidTerrainModeValue |
high | done |
081725AC (gTerrainHeights0) |
0x8 | name for heights[0] of terrain type 0 (an asm .set alias into gTerrainTypes). Converted (engine/src/game/level/data/terrain_types.cpp) |
GetTerrainHeights, GetSolidTerrainHeights |
medium | done |
081725B4 (gTerrainHeights1) |
0x8 | name for heights[1] of terrain type 0 (alias). Converted (engine/src/game/level/data/terrain_types.cpp) |
GetSolidTerrainHeights |
medium | done |
081725BC (gTerrainHeights2) |
0x8 | name for heights[2] of terrain type 0 (alias). Converted (engine/src/game/level/data/terrain_types.cpp) |
GetSolidTerrainHeights |
medium | done |
081725C4 (gTerrainHeights3) |
0x261C | heights[3] of terrain type 0 (alias); the old label ran on through the terrain table and then the game's UI text: 367 strings and the six 70-entry language tables gUiTextEnglish...gUiTextDutch (engine/src/game/ui/data/ui_text.cpp). Converted (engine/src/game/level/data/terrain_types.cpp, engine/src/game/ui/data/ui_text.cpp) |
GetSolidTerrainHeights |
medium | done |
08174BE0 |
0x8C | table of u32 (u32 x 35). Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitHud, ConfigureHudParts |
high | done |
08174C6C |
0x118 | table of struct hud_pos. Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitHud, ConfigureHudParts, UpdateHudBoss +2 |
high | done |
08174D84 |
0x50 | HUD font A's characters in glyph order (a string, Latin-1). Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitSmallFont |
medium | done |
08174DD4 |
0x3B4 | table (element layout: see consumers). Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitSmallFont |
medium | done |
08175188 |
0x4C | HUD font B's characters in glyph order. Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitLargeFont |
medium | done |
081751D4 |
0x384 | table (element layout: see consumers). Converted (engine/src/game/ui/data/hud_font_tables.cpp) |
InitLargeFont |
medium | done |
08175558 |
0xC | first 0xC bytes of category_descriptor[0] (label splits the struct array) (struct category_descriptor x 7) |
InitActorCategory, SetupActorVramPool, CountCategoryCrates +1 |
high | easy |
08175564 |
0x20 | category_descriptor[0] bytes 0x0C-0x2B (part of gActorCategories[7]) | InitActorCategory |
high | easy |
08175584 |
0x140 | category_descriptor[0] +0x2C .. [6] end (part of gActorCategories[7]) | InitActorCategory |
high | easy |
081756C4 |
0x9C | category_vtable[3]: 3 x 13 Thumb function pointers (slots 7/8 of type 0 hold junk values) | SelectActorCategory |
high | easy |
08175760 |
0x3800 | palette-cycle frames: 32 x 0x1C0-byte BGR555 blocks (BG palettes 0-13). Converted (engine/src/engine/actor/data/actor_palette_cycle_frames.cpp) |
UpdateActorPaletteCycle |
high | done |
08178F60 |
0x10 | palette-cycle cursor starts s32[4]. Converted |
SetActorPaletteCycle |
high | done |
08178F70 |
0x10 | palette-cycle cursor bounds s32[4]. Converted |
SetActorPaletteCycle |
high | done |
08178F80 |
0x1738 | categories 0-2 family data: OBJ palette, keyframe tables (table_A), anim table gCategoryFamily0AnimTable (41 x 0x28) and table_B arrays. Converted (engine/src/game/vehicles/polar/data/polar_anim_family.cpp, docs/data.md "Category families") |
RunCompanyLogos |
high | done |
0817A6B8 |
0x70 | function-pointer / pointer-to-member table (14 code pointers) | UpdatePolarPlayer, RunPolarPlayerState |
high | easy |
0817A728 |
0x20 | 16-colour palette. Converted (engine/src/game/vehicles/polar/data/polar_palettes_boxes.cpp) |
HurtPolarPlayer, PolarPlayerStateShocked |
high | done |
0817A748 |
0x20 | 16-colour palette. Converted | PolarPlayerStateShocked |
high | done |
0817A768 |
0xC | struct anim_box. Converted |
UpdatePolarNitroCrate |
medium | done |
0817A774 |
0xC | struct anim_box. Converted |
UpdatePolarElectricFence |
medium | done |
0817A780 |
0xC | struct anim_box. Converted |
UpdatePolarElectricFence |
medium | done |
0817A78C |
0xC | struct anim_box. Converted |
UpdatePolarElectricFence |
medium | done |
0817A798 |
0x20 | 16-colour palette (gauge tier 1). Converted | RefreshPolarAkuAku |
high | done |
0817A7B8 |
0x20 | 16-colour palette. Converted | UpdatePolarAkuAku |
high | done |
0817A7D8 |
0x20 | 16-colour palette. Converted | UpdatePolarAkuAku |
high | done |
0817A7F8 |
0x48 | 6 x {s32 value, s32 threshold, s32 threshold}. Converted |
YetiStateChase, YetiStateCharge |
medium | done |
0817A840 |
0x10 | function-pointer / pointer-to-member table (4 code pointers) (void (*)(void) x 4) |
UpdateYeti |
high | easy |
0817A850 |
0x30 | 4 struct anim_frame_record (the CreateYeti singleton's keyframes). Converted (engine/src/game/vehicles/polar/data/yeti_keyframes.cpp) |
CreateYeti |
medium | done |
0817A880 |
0x1EC | table_B: 123 absolute pointers into compressed frame set B (0x080DA1D8..) | CreateYeti |
high | easy |
0817AA6C |
0x20 | 16-colour gradient palette. Converted (engine/src/game/vehicles/jetpack/data/jetpack_anim_family.cpp) |
UpdateYetiPalette |
high | done |
0817AA8C |
0xC | struct anim_box. Converted |
IsTouchingYeti |
medium | done |
0817AA98 |
0x1728 | categories 3-6 family data: a box, 2 OBJ palettes, table_A, anim table gCategoryFamily1AnimTable (47 x 0x28), table_B arrays. Converted (engine/src/game/vehicles/jetpack/data/jetpack_anim_family.cpp) |
UpdateYeti |
high | done |
0817C1C0 |
0x40 | function-pointer / pointer-to-member table (8 code pointers) | UpdateJetpackPlayer, RunJetpackPlayerState |
high | easy |
0817C200 |
0x60 | 3-frame 16-colour palette strip. Converted (engine/src/game/vehicles/jetpack/data/jetpack_flash_palettes.cpp) |
AnimateJetpackPlayerPalette |
high | done |
0817C260 |
0x20 | function-pointer / pointer-to-member table (4 code pointers) | UpdateJetpackPlane, RunJetpackPlaneState |
high | easy |
0817C280 |
0x38 | function-pointer / pointer-to-member table (7 code pointers) | UpdateJetpackBomber, RunJetpackBomberState |
high | easy |
0817C2B8 |
0x18 | function-pointer / pointer-to-member table (3 code pointers) | UpdateAirshipFireball, RunAirshipFireballState |
high | easy |
0817C2D0 |
0xA8 | 6 struct airship_attack (7 words). Converted (engine/src/game/vehicles/jetpack/data/airship_attacks.cpp) |
SpawnAirship |
high | done |
0817C378 |
0x60 | 3-frame 16-colour palette strip. Converted | SpawnAirship, AnimateAirshipPalette |
high | done |
0817C3D8 |
0xC | struct anim_box. Converted |
AirshipStateExplode, SteerAirship, IsTouchingAirship |
high | done |
0817C3E4 |
0x18 | 2 struct anim_frame_record. Converted |
CreateAirship |
high | done |
0817C3FC |
0x18 | function-pointer / pointer-to-member table (6 code pointers) (void* x 6) |
UpdateAirship |
high | easy |
0817C414 |
0x18 | function-pointer / pointer-to-member table (3 code pointers) | RunJetpackBalloonState |
high | easy |
0817C42C |
0x18 | function-pointer / pointer-to-member table (3 code pointers) | UpdateJetpackBalloonCrate, RunJetpackBalloonCrateState |
high | easy |
0817C444 |
0xC | struct anim_box. Converted (engine/src/game/vehicles/jetpack/data/jetpack_rocket_box.cpp) |
UpdateJetpackRocket |
medium | done |
0817C450 |
0x10 | function-pointer / pointer-to-member table (2 code pointers) | UpdateHovercraftFireball, RunHovercraftFireballState |
high | easy |
0817C460 |
0x50 | 2 struct hovercraft_attack (10 words). Converted (engine/src/game/bosses/data/hovercraft_attacks.cpp) |
SpawnHovercraft |
high | done |
0817C4B0 |
0xC | struct anim_box. Converted |
HovercraftStateCloseIn |
high | done |
0817C4BC |
0xC | 1 struct anim_frame_record. Converted |
CreateHovercraft |
medium | done |
0817C4C8 |
0x18 | function-pointer / pointer-to-member table (6 code pointers) (void* x 6) |
RunHovercraftState |
high | easy |
0817C4E0 |
0x18 | function-pointer / pointer-to-member table (3 code pointers) | UpdateHovercraftCannon, RunHovercraftCannonState |
high | easy |
0817C4F8 |
0x18 | function-pointer / pointer-to-member table (3 code pointers) | UpdateHovercraftLauncher, RunHovercraftLauncherState |
high | easy |
0817C510 |
0x2 | the text ">". Converted (engine/src/game/ui/data/continue_prompt_palettes.cpp) |
DrawContinuePrompt |
medium | done |
0817C512 |
0x20 | 16 palette halfwords. Converted | InitContinuePromptGraphics |
high | done |
0817C532 |
0x20 | 16 palette halfwords. Converted | InitContinuePromptGraphics |
high | done |
0817C552 |
0x20 | 16 halfwords (mostly 0xFFFF). Converted | InitContinuePromptGraphics |
high | done |
0817C572 |
0x22 | 16 halfwords + the 2-byte zero pad. Converted | InitContinuePromptGraphics |
high | done |
0817C594 |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | InitContinuePrompt |
medium | easy |
0817C5A8 |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | InitContinuePrompt |
medium | easy |
0817C5BC |
0x14 | table (element layout: see consumers); 3 word(s) look like ROM pointers | InitContinuePrompt |
medium | easy |
0817C5D0 |
0x96C | the credits: text lines with opcodes 1 n (picture n), 2 (small font), 3 (large font), zero-terminated. Converted (engine/src/game/ui/data/credits_text.cpp) |
InitCredits |
high | done |
0817CF3C |
0x4 | an empty string (4 bytes). Converted (engine/src/game/ui/data/credits_text.cpp) |
UpdateCreditsText |
high | done |
0817CF40 |
0x64 | table of struct popup_glyph_src; 10 word(s) look like ROM pointers | LoadCreditsLogos |
high | easy |
0817CFA4 |
0x50 | table (element layout: see consumers); 9 word(s) look like ROM pointers | RunTitleScreen, ResetTitleLogoPieces |
medium | easy |
0817CFF4 |
0x40 | 8 {x, y} OAM piece offsets. Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
DrawTitleLogoPieces |
high | done |
0817D034 |
0x20 | table (element layout: see consumers); 1 word(s) look like ROM pointers. Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
InitTitleScreen |
medium | done |
0817D054 |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
InitTitleScreen |
high | done |
0817D074 |
0x70 | 16-colour palette + 4 OBJ sprite struct bg_packages (gTitleBandicootObj/0A8/0BC/0D0, gTitleObjPackages's). Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
InitTitleScreen |
medium | done |
0817D0E4 |
0x5B4 | struct bg_package (BG2) + 9 motion sequences of struct delta_record (gTitleLogoPieceMotion0...), the seeds' targets. Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
LoadTitleScreenBg |
high | done |
0817D698 |
0x28 | an animation record (actor_anim.h's struct anim_table_record, family A record 0's arrays). Converted (engine/src/game/ui/data/title_screen_gfx.cpp) |
RunCompanyLogos |
medium | done |
0817D6C0 |
0xA8 | table (element layout: see consumers); 20 word(s) look like ROM pointers | InitVvLogoPieces |
medium | easy |
0817D768 |
0x14 | table (element layout: see consumers); 2 word(s) look like ROM pointers | LoadVvLogoGraphics |
medium | easy |
0817D77C |
0x14 | table (element layout: see consumers); 2 word(s) look like ROM pointers | LoadVvLogoGraphics |
medium | easy |
0817D790 |
0x14 | table (element layout: see consumers); 2 word(s) look like ROM pointers | LoadVvLogoGraphics |
medium | easy |
0817D7A4 |
0xF70 | struct bg_package (BG2) + 20 motion sequences of struct delta_record + the 6 language names (gLanguageNameEnglish...). Converted (engine/src/game/ui/data/universal_vv_logo_motions.cpp) |
LoadUniversalLogoBg |
medium | done |
0817E714 |
0x18 | pointer table (6 data pointers) (void* x 6) |
DrawLanguageSelect |
high | easy |
0817E72C |
0x20 | table of u16; 1 word(s) look like ROM pointers (u16 x 16). Converted (engine/src/game/ui/data/language_select_palettes.cpp) |
InitLanguageSelectGraphics |
high | done |
0817E74C |
0x20 | BGR555 palette(s): 1 x 16 colours (u16 x 16). Converted (engine/src/game/ui/data/language_select_palettes.cpp) |
InitLanguageSelectGraphics |
high | done |
0817E76C |
0x20 | table of u16 (u16 x 16). Converted (engine/src/game/ui/data/language_select_palettes.cpp) |
InitLanguageSelectGraphics |
high | done |
0817E78C |
0x326E74 | composite: level BG tile sets (raw tag-0x00 assets), per-room level data, sprite-bank tile pool | InitLanguageSelectGraphics |
high | medium |
084A5600 |
0xB66B4 | composite: sprite-bank (animation) table (converted, C) + GAX2 sound-effect bank (converted, gax_audio.py --sfx) |
RunPauseMenu, InitLevelState |
high | medium |
085A4C5C |
0x14 | the default song's GAX2_Song struct {4, mixer, info, unk_ptr, channel} (the engine's default handler layout). Built by tools/gax_audio.py (gax_default_layout.bin) |
GAX2_estimate, GAX2_init |
high | done |
085A4C70 |
0x100 | u8[256] count-leading-zeros table (libgcc __clz_tab of __divdi3). Converted (lib/libgcc/data/clz_tab.c) |
__divdi3 |
high | done |
085A4D70 |
0x100 | u8[256] count-leading-zeros table (the second copy, __udivdi3's). Converted (lib/libgcc/data/clz_tab.c) |
__udivdi3 |
high | done |
085A5519 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
085A60FF |
0x4D | 1 B pad (gbagfx's padding of the .lz stream before it, now built) + GAX2 version string "GAX Sound Engine 2.01D (Sep 28 2001) (c) Shin'en Multimedia. Code: B.Wodok". Converted (gGaxVersionString, lib/gax/data/gax_tables.c) |
GAX2_init (via gGaxVersionStringPtr) |
high | done |
085A614C |
0x4 | pointer to the GAX2 version string. Converted (gGaxVersionStringPtr = gGaxVersionString) |
GAX2_init |
high | done |
085A6150 |
0x60 | 12 struct RateEntry {rate in Hz, timer reload}. Converted |
GaxFindMixRate, GAX2_estimate, GAX2_init |
high | done |
085A61B0 |
0xC | GAX2 error string "GAX2_NEW". Converted | GAX2_new |
medium | done |
085A61BC |
0x14 | GAX2 error string "PARAMS ARG IS NULL". Converted | GAX2_new |
medium | done |
085A61D0 |
0xC | GAX2 error/tag string "GAX2_INIT". Converted | GAX2_init, GAX2_jingle |
high | done |
085A61DC |
0x10 | GAX2 error/tag string "OUT OF MEMORY". Converted | GAX2_init, GAX2_jingle |
high | done |
085A61EC |
0xC | GAX2 error/tag string "GAX2_JINGLE". Converted | GAX2_jingle |
high | done |
085A61F8 |
0x1C | GAX2 error/tag string "GAX_NO_JINGLE FLAG IS SET". Converted | GAX2_jingle |
high | done |
085A6214 |
0x8 | GAX2 error/tag string "GAX_IRQ". Converted | GAX_irq |
high | done |
085A621C |
0xAC | GAX2 error string "GAX_PLAY HAS NOT FINISHED BEFORE GAX_IRQ. ...", then the halt banner "GAX ENGINE V2.01D Sep 28 2001\n\nEXCEPTION. PROGRAM HALT." (gGaxHaltBanner, +0x74). Converted |
GAX_irq |
high | done |
085A62C8 |
0x4 | pointer to the halt banner. Converted (gGaxHaltBannerPtr = gGaxHaltBanner) |
GaxFatalError |
high | done |
085A62CC |
0x10 | GAX2 halt-screen string "FUNCTION NAME:". Converted | GaxFatalError |
medium | done |
085A62DC |
0x3BD0 | GAX2 u32 note period table (u32 x 3828; its 0x08xxxxxx values are a smooth ramp, not pointers). Converted |
GaxChannelMix |
high | done |
085A9EAC |
0x4C | s8[64] vibrato sine wave, then the SDK's "EEPROM_V122" id string (gEepromLibraryVersion, +0x40). Converted (gax_tables.c, eeprom_data.c) |
GaxChannelTickVibrato |
high | done |
085A9EF8 |
0xC | struct EepromConfig of the 4 Kbit chip. Converted (lib/agb_eeprom/data/eeprom_data.c) |
EEPROMConfigure |
high | done |
085A9F04 |
0xC | struct EepromConfig of the 64 Kbit chip. Converted |
EEPROMConfigure |
high | done |
085A9F10 |
0x260 | EEPROM write timeout u16[3] + pad, then the library's 22 address constants (gEepromLibraryAddresses, no reader), then the palette of cutscene picture 00. Converted (eeprom_data.c, cutscene_pictures.cpp) |
EEPROMWrite |
high | done |
085ADBD1 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 01), bit 15 set in many entries. Converted (gCutscenePicture01, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085B34E1 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 02), bit 15 set in many entries. Converted (gCutscenePicture02, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085B82BC |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 03), bit 15 set in many entries. Converted (gCutscenePicture03, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085BC6E8 |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 04), bit 15 set in many entries. Converted (gCutscenePicture04, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085C1936 |
0x202 | 2 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 05), bit 15 set in many entries. Converted (gCutscenePicture05, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085C674D |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 06), bit 15 set in many entries. Converted (gCutscenePicture06, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085CB15D |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 07), bit 15 set in many entries. Converted (gCutscenePicture07, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085CFECA |
0x202 | 2 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 08), bit 15 set in many entries. Converted (gCutscenePicture08, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085D6531 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 09), bit 15 set in many entries. Converted (gCutscenePicture09, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085DB765 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 10), bit 15 set in many entries. Converted (gCutscenePicture10, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085DFABC |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 11), bit 15 set in many entries. Converted (gCutscenePicture11, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085E550B |
0x201 | 1 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 12), bit 15 set in many entries. Converted (gCutscenePicture12, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085EAC44 |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 13), bit 15 set in many entries. Converted (gCutscenePicture13, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085F0367 |
0x201 | 1 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 14), bit 15 set in many entries. Converted (gCutscenePicture14, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085F4CC1 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 15), bit 15 set in many entries. Converted (gCutscenePicture15, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085FA1D2 |
0x202 | 2 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 16), bit 15 set in many entries. Converted (gCutscenePicture16, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
085FF779 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 17), bit 15 set in many entries. Converted (gCutscenePicture17, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
086039B2 |
0x202 | 2 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 18), bit 15 set in many entries. Converted (gCutscenePicture18, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
08608A50 |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 19), bit 15 set in many entries. Converted (gCutscenePicture19, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
0860D577 |
0x201 | 1 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 20), bit 15 set in many entries. Converted (gCutscenePicture20, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
08611BD9 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 21), bit 15 set in many entries. Converted (gCutscenePicture21, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
08616360 |
0x200 | 256-colour palette of the next Mode 4 bitmap (cutscene picture 22), bit 15 set in many entries. Converted (gCutscenePicture22, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
08619F51 |
0x203 | 3 B zero pad (alignment after the previous bitmap) + 256-colour palette of the next Mode 4 bitmap (cutscene picture 23), bit 15 set in many entries. Converted (gCutscenePicture23, engine/src/game/ui/data/cutscene_pictures.cpp) |
gCutscenes (slide packages) |
high | done |
0861BF2E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0861C182 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0861C309 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0861E5F6 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862556B |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08628C4F |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862A957 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862C2C5 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862C4AD |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862CC3B |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862CE6E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862D0CB |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862E3AF |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0862FFF3 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086308EF |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08630E19 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08631155 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08631372 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086313AD |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08631557 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086315BB |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863183A |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863199E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086324B3 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863281E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08632BC2 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086334C1 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08636EF1 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08637603 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086377BD |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08637A6E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086382C6 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08639459 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863A60A |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863AD8D |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863B666 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863BDD2 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863CF95 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863D333 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0863D4BF |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08640EF5 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08644A86 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08649417 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0864D7E5 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0864F82F |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08651CF7 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08655175 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0865BAEB |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0865E05A |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08661F46 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086652B6 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08665935 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0867045E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0867829B |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0867EDF3 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086834F5 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08689F72 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
0868D311 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
08693B8E |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086A8349 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086AF12B |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086BACB3 |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086C127C |
0x18A30 | raw (unpacked) level asset for room 0x0825E7DC: u16 chunk offset table + chunk token streams (custom RLE/delta, DecodeLayerChunk/DecodeCollisionChunk) | LoadRoom, SetCollisionSource, SetBgStreamerSource +2 |
high | converted |
086E044B |
0x1 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086E2212 |
0x2 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086E3541 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086EA0C9 |
0x3 | padding (zero, aligns the next LZ77 blob to 4). Built: gbagfx's zero padding of the preceding .lz stream |
- | high | done |
086ECCD2 |
0xF6F1A | 6 raw (unpacked) level assets, same format as 0x086C127C | LoadRoom, SetCollisionSource, SetBgStreamerSource +2 |
high | converted (the 2 B pad is gbagfx's padding) |
087E3BEC |
0x58 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateEntity, InitEntity, DestroyEntity +2 |
high | easy |
087E3C44 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateSpriteObj, InitSpriteObj |
high | easy |
087E3CAC |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyUiSpriteObj, InitUiSpriteObj |
high | easy |
087E3D14 |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateMovingSprite, DestroyMovingSprite, InitMovingSprite |
high | easy |
087E3D8C |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateGroundSprite, DestroyGroundSprite, InitGroundSprite |
high | easy |
087E3E04 |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyPlayer, InitPlayer |
high | easy |
087E3E7C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCtrl, InitCtrl |
high | easy |
087E3EE4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyEnemyCtrl, CreateEnemyCtrl |
high | easy |
087E3F4C |
0x58 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePeriodicSpawner |
high | easy |
087E3FA4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyKnockedEnemyCtrl, CreateKnockedEnemyCtrl |
high | easy |
087E400C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyEffectCtrl, InitEffectCtrl |
high | easy |
087E4074 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateCrate, DestroyCrate, InitCrate |
high | easy |
087E40DC |
0x70 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateExtraLife, DestroyExtraLife, InitExtraLife |
high | easy |
087E414C |
0x70 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateWumpa, DestroyWumpa, InitWumpa |
high | easy |
087E41BC |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateStopwatch, DestroyStopwatch, InitStopwatch |
high | easy |
087E4224 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyActionCtrl, InitActionCtrl |
high | easy |
087E428C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroySwimCtrl, InitSwimCtrl |
high | easy |
087E42F4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyInputCtrl, CreateInputCtrl |
high | easy |
087E435C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyBossCtrl, CreateBossCtrl |
high | easy |
087E43C4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyMegaMixCtrl, CreateMegaMixCtrl |
high | easy |
087E442C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyStompedHopPadCtrl, CreateStompedHopPadCtrl |
high | easy |
087E4494 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateOneShotAnimCtrl, DestroyOneShotAnimCtrl |
high | easy |
087E44FC |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateUnusedOneShotAnimCtrl, DestroyUnusedOneShotAnimCtrl |
high | easy |
087E4564 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyTiny, CreateTiny |
high | easy |
087E45CC |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexBossGemCtrl, CreateCortexBossGemCtrl |
high | easy |
087E4634 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexBossPlatformMover, CreateCortexBossPlatformMover |
high | easy |
087E469C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexShotCtrl, CreateCortexShotCtrl |
high | easy |
087E4704 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexTargetCtrl, CreateCortexTargetCtrl |
high | easy |
087E476C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexCannonCtrl, CreateCortexCannonCtrl |
high | easy |
087E47D4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCortexBoss, CreateCortexBoss |
high | easy |
087E483C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateDingodileSharkCtrl, DestroyDingodileSharkCtrl |
high | easy |
087E48A4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | SpawnDingodileStalactite, DestroyDingodileProjectileCtrl, CreateDingodileProjectileCtrl |
high | easy |
087E490C |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyDingodileShieldCtrl, CreateDingodileShieldCtrl |
high | easy |
087E4974 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyDingodile, CreateDingodile |
high | easy |
087E49DC |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePlatform, DestroyPlatform, InitPlatform |
high | easy |
087E4A54 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyPlatformMover, CreatePlatformMover |
high | easy |
087E4ABC |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyCameraLead, CreateCameraLead |
high | easy |
087E4B34 |
0x78 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | SpawnLaunchPad, DestroyLaunchPad, InitLaunchPad |
high | easy |
087E4BAC |
0x30 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyLevelSelectEntry, CreateLevelSelectEntry |
high | easy |
087E4BDC (gBgStreamerVtable) |
0x10 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyBgStreamer, InitBgStreamer |
high | easy |
087E4BEC (gBgLayerBaseVtable) |
0x28 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyBgLayerBase, InitBgLayerBase |
high | easy |
087E4C14 (gBgLayerVtable) |
0x50 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitBgLayer, DestroyBgLayer, DestroyPooledBgLayer |
high | easy |
087E4C64 (gPooledBgLayerVtable) |
0x50 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyPooledBgLayer, InitPooledBgLayer |
high | easy |
087E4CB4 |
0x68 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyHudPart, InitHudPart |
high | easy |
087E4D1C |
0x48 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitLargeFont, DestroyLargeFont |
high | easy |
087E4D64 |
0x48 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitSmallFont, DestroySmallFont |
high | easy |
087E4DAC |
0x48 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitSmallFont, InitLargeFont, DestroyFont +3 |
high | easy |
087E4DF4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitActorPart, DestroyActor, DestroyPolarPlayer +41 |
high | easy |
087E4E14 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor |
high | easy |
087E4E34 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarCheckpointText |
high | easy |
087E4E54 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | ConstructActorPart, DestroyPolarPlayer |
high | easy |
087E4E74 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyPolarCollectedWumpa, CreatePolarCollectedWumpa |
high | easy |
087E4E94 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarWumpa |
high | easy |
087E4EB4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarTimeCrate |
high | easy |
087E4ED4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarQuestionCrate |
high | easy |
087E4EF4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarAkuAkuCrate |
high | easy |
087E4F14 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarNitroCrate |
high | easy |
087E4F34 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarLifeCrate |
high | easy |
087E4F54 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarFourWumpaCrate |
high | easy |
087E4F74 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateActor, CreatePolarBasicCrate |
high | easy |
087E4F94 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitPolarCrate |
high | easy |
087E4FB4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarElectricFence |
high | easy |
087E4FD4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarObstacle |
high | easy |
087E4FF4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarLauncher |
high | easy |
087E5014 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarPenguin |
high | easy |
087E5034 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarIcicle |
high | easy |
087E5054 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarAkuAku |
high | easy |
087E5074 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarGoal |
high | easy |
087E5094 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarBoostPad |
high | easy |
087E50B4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreatePolarCheckpointCrate |
high | easy |
087E50D4 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackCheckpointText |
high | easy |
087E510C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackExplosion |
high | easy |
087E5144 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitJetpackPlayer, DestroyJetpackPlayer |
high | easy |
087E517C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackShot |
high | easy |
087E51B4 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackPlane |
high | easy |
087E51EC |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackBomber |
high | easy |
087E5224 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackCannonball |
high | easy |
087E525C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateAirshipFireball |
high | easy |
087E5294 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackBalloon |
high | easy |
087E52CC |
0x40 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackHealthCrate |
high | easy |
087E530C |
0x40 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackTimeCrate |
high | easy |
087E534C |
0x40 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackQuestionCrate |
high | easy |
087E538C |
0x40 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackTimeCrate, CreateJetpackHealthCrate, CreateJetpackQuestionCrate +1 |
high | easy |
087E53CC |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackParachuteNitro |
high | easy |
087E5404 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackRocket |
high | easy |
087E543C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateJetpackRing |
high | easy |
087E5474 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | DestroyJetpackCollectedWumpa, CreateJetpackCollectedWumpa |
high | easy |
087E54AC |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateHovercraftFireball |
high | easy |
087E54E4 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateHovercraftCannon |
high | easy |
087E551C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateHovercraftLauncher |
high | easy |
087E5554 |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateHovercraftSideGun |
high | easy |
087E558C |
0x38 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | CreateHovercraftCannonFlash |
high | easy |
087E55C4 |
0x20 | gcc 2.x vtable: 8-byte {s16 delta, s16 pad, fnptr} slots, first two words zero | InitLogoActor, DestroyLogoActor |
high | easy |
087E55E4 |
0x1AA1C | IWRAM image (ARM code + initialised data, 0x9E8 B) copied to 0x03000000 by crt0, then 0xFF cartridge fill | _0800012C |
high | converted (platform/gba/asm/intr_main.s, engine/src/engine/*/*_arm.cpp, engine/src/engine/sys/iwram_data.cpp, ldscript iwram/rom_fill) |