Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
3c19c4c
decomp: define the boot messages and formats of ten units in C
nickyyOO Nov 3, 2026
d0a6eff
decomp: define the messages of 40 SDK, audio, save and movie units in C
nickyyOO Nov 3, 2026
b6dc076
decomp: define the C-locale lconv, dtoa strings and p05 table in C
nickyyOO Nov 3, 2026
50bcc4c
decomp: define the DMA channel tables, MPEG extension parsers and PES…
nickyyOO Nov 3, 2026
5be0f38
decomp: define the memory card save paths in memcard_get_name
nickyyOO Nov 3, 2026
5f77010
decomp: define two GS timeout messages, the MPEG flush code, a memcar…
nickyyOO Nov 3, 2026
dea229a
decomp: define sceCdRead's request and the pad2 DMA state words in C
nickyyOO Nov 3, 2026
c83c695
decomp: define the sound batch buffer pointers in snd_start_sound_system
nickyyOO Nov 3, 2026
37fdba7
decomp: define rendering profiler labels, vu1 messages and environmen…
nickyyOO Nov 3, 2026
7165df2
decomp: define rendering GS packets, variant tables and the vu chain …
nickyyOO Nov 3, 2026
cbf0d18
decomp: define the sky paging bypass tag and view projection constant…
nickyyOO Nov 3, 2026
f2763a2
decomp: define the small data of ten ui units in C
nickyyOO Nov 3, 2026
ad141c7
decomp: define one-reader data of map, menu, moby, camera and transit…
nickyyOO Nov 3, 2026
c639600
decomp: define map icon lists, preview slot flags and hud, freeze and…
nickyyOO Nov 3, 2026
30086d3
decomp: define the integer formats of format_scaled_display_value in C
nickyyOO Nov 3, 2026
9999a4a
decomp: define the shrub class table, level select texts and normal L…
nickyyOO Nov 3, 2026
58af3a8
decomp: define the per-level progress records in C
nickyyOO Nov 3, 2026
946ec4e
decomp: read voice pool and item flag fields through their objects
nickyyOO Nov 3, 2026
4ed159c
decomp: define the memory card state after the save paths
nickyyOO Nov 3, 2026
22085e1
decomp: define the saved item tables after the memory card state
nickyyOO Nov 3, 2026
1793f36
decomp: define the rest of the saved globals before the level render …
nickyyOO Nov 3, 2026
6d23440
decomp: define small data in the one unit that reads it through $gp
nickyyOO Nov 3, 2026
066548b
decomp: read the item flags through item_available in level code and …
nickyyOO Nov 3, 2026
2f5b492
decomp: format the new data definitions and give the save globals one…
nickyyOO Nov 3, 2026
1568d80
decomp: audit the new data definitions: real types, field access and …
nickyyOO Nov 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,063 changes: 1,006 additions & 57 deletions config/us/levels/exe_data.tsv

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion config/us/symbol_addrs.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
D_0013C940 = 0x0013C940;
D_0012F76C = 0x0012F76C;
D_00152370 = 0x00152370;
D_00154940 = 0x00154940;
D_0015EE74 = 0x0015EE74;
D_0015F49C = 0x0015F49C;
Expand Down
23 changes: 19 additions & 4 deletions config/us/undefined_syms.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
D_0013C940 = 0x0013C940;
D_0012F76C = 0x0012F76C;
D_00152370 = 0x00152370;
D_00154940 = 0x00154940;
D_0015EE74 = 0x0015EE74;
D_0015F49C = 0x0015F49C;
Expand Down Expand Up @@ -30,7 +29,6 @@ D_0015F60C_2 = 0x0015F60C;
D_0015FEFC_2 = 0x0015FEFC;
D_001E83C0 = 0x001E83C0;
D_00160F00_abs = 0x00160F00;
D_001E8360 = 0x001E8360;
D_00159750 = 0x00159750;
D_00159758 = 0x00159758;
D_0015EBE8 = 0x0015EBE8;
Expand All @@ -40,7 +38,6 @@ D_0018E340 = 0x0018E340;

/* Interior sceLseek label referenced by music_start_track_30000. */
D_0011C178 = 0x0011C178;
D_0015FFC8 = 0x0015FFC8;
D_00137EA8 = 0x00137EA8;
D_00137F20 = 0x00137F20;
D_00137F98 = 0x00137F98;
Expand All @@ -63,10 +60,28 @@ D_001601E8 = 0x001601E8;
D_001601F0 = 0x001601F0;
D_00160200 = 0x00160200;
D_001D62B8 = 0x001D62B8;
D_001DDD4C = 0x001DDD4C;
D_001DDD50 = 0x001DDD50;
FUN_00219d80 = 0x00219D80;
FUN_0021d168 = 0x0021D168;
FUN_0021e7c8 = 0x0021E7C8;
FUN_00221800 = 0x00221800;
FUN_00221ab8 = 0x00221AB8;
D_001A0910 = 0x001A0910;
D_001A0A28 = 0x001A0A28;
D_001A0BE0 = 0x001A0BE0;
D_001A0E60 = 0x001A0E60;
D_001A10E0 = 0x001A10E0;
D_001A1270 = 0x001A1270;
D_001A14C8 = 0x001A14C8;
D_001A1680 = 0x001A1680;
D_001A1860 = 0x001A1860;
D_001A1A18 = 0x001A1A18;
D_001A1C20 = 0x001A1C20;
D_001A1EC8 = 0x001A1EC8;
D_001A2148 = 0x001A2148;
D_001A22B0 = 0x001A22B0;
D_001A2490 = 0x001A2490;
D_001A26C0 = 0x001A26C0;
D_001A28C8 = 0x001A28C8;
D_001A2A08 = 0x001A2A08;
D_001A2AF8 = 0x001A2AF8;
153 changes: 134 additions & 19 deletions configure.py

Large diffs are not rendered by default.

13 changes: 1 addition & 12 deletions include/rnc/data_labels.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define LOMBYTE_RNC_DATA_LABELS_H

#include "types.h"
#include "rnc/game/level_progress.h"

/* Globals several files read whose meaning is not known yet, by address.
Name one and move it to its subsystem header. */
Expand All @@ -20,24 +21,16 @@ extern s32 D_001312E4[];
extern s32 D_00131314[];
extern unsigned char D_0013A4E0[];
extern s32 D_0013CB14[];
extern char D_0013D1D0[];
extern char D_0013D1E8[];
extern char D_0013D200[];
extern char D_0013D220[];
extern char D_0013D240[];
extern char D_0013D270[];
extern s32 D_0013D384 __attribute__((section(".data")));
extern unsigned char D_0013D3DD __attribute__((section(".data")));
extern unsigned char D_0013D3E2[];
extern unsigned char D_0013D3E9 __attribute__((section(".data")));
extern u8 D_0013D4C2[];
extern unsigned char D_0013D4C6[];
extern unsigned char D_0013D4DA __attribute__((section(".data")));
extern unsigned char D_0013D4DC[];
extern unsigned char D_0013D504[];
extern int D_0013D8AC __attribute__((section(".data")));
extern unsigned char D_0013DD4A __attribute__((section(".data")));
extern s32 D_0013DF88[];
extern u8 D_0013E05A[];
extern char D_0013E533[];
extern char D_0013F3D0[];
Expand All @@ -47,9 +40,6 @@ extern s32 D_001413D0[];
extern int D_001413DC[];
extern u8 D_001413F5[];
extern unsigned char D_0014161B[];
extern char D_00141EC0[];
extern u8 D_0014BEC0[];
extern u8 D_0014BF10[];
extern s32 D_0014EE90[16];
extern short D_001516F0 __attribute__((section(".data")));
extern u8 D_00154A80[];
Expand Down Expand Up @@ -116,7 +106,6 @@ extern char D_001B2C00[];
extern s32 D_001CDF80[];
extern s32 D_001D2640[];
extern u8 D_001D8EB0[];
extern u8 D_001DDD40[];
extern u8 D_001E1300[];
extern u8 D_002169C0[];
extern u8 D_1FF8000[];
Expand Down
3 changes: 2 additions & 1 deletion include/rnc/game/bolt_sources.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ typedef struct BoltSourceStats {
s16 bolts; /* bolts collected from this source */
} BoltSourceStats;

extern BoltSourceStats bolt_source_stats[][64] __asm__("D_0014D590");
/* One row per level record (20), see rnc/game/level_progress.h. */
extern BoltSourceStats bolt_source_stats[20][64] __asm__("D_0014D590");

#endif /* LOMBYTE_RNC_GAME_BOLT_SOURCES_H */
14 changes: 7 additions & 7 deletions include/rnc/game/game_globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
#define LOMBYTE_RNC_GAME_GAME_GLOBALS_H

#include "types.h"
#include "rnc/game/level_progress.h"

extern s32 ship_substate[] __asm__("D_0013E050");
extern s16 ship_index[] __asm__("D_0013E056");
extern char item_usage[] __asm__("D_00141680");
extern unsigned char visited52[] __asm__("D_0014C050");
extern s16 cd_read_active[] __asm__("D_001516D8");
extern s32 hero_max_health __asm__("D_0015EDA0");
extern s32 *level_root __asm__("D_0015EE4C");
extern s32 ship_substate[] __asm__("D_0013E050");
extern s16 ship_index[] __asm__("D_0013E056");
extern char item_usage[] __asm__("D_00141680");
extern s16 cd_read_active[] __asm__("D_001516D8");
extern s32 hero_max_health __asm__("D_0015EDA0");
extern s32 *level_root __asm__("D_0015EE4C");
extern s32 freeze_stats_time_ref[] __asm__("D_0015EE58") __attribute__((section(".sdata")));
extern s32 freeze_stats_score_ref_a[] __asm__("D_0015EE68") __attribute__((section(".sdata")));
extern s32 intro_overlay_alpha __asm__("D_0015EF50");
Expand Down
25 changes: 18 additions & 7 deletions include/rnc/game/item_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,30 @@

#include "types.h"
#include "sda.h"
#include "rnc/game/level_progress.h"

/* Per-item flag tables of the save state, indexed by item id. */
extern u8 alternate_item_available[128] __asm__("D_0013D388");
extern u8 item_unlocked[32] __asm__("D_0013D408");
extern s32 weapon_ammo_counts[37] __asm__("D_0013D428");
extern u8 item_available[35] __asm__("D_0013D4C0");
extern u8 discount_purchase_pricing[5] __asm__("D_0013D4E3") NOT_SDA;
extern u8 item_text_variant[40] __asm__("D_0013E520");
/* item_available and items_acquired hold 37 items: mc_gamedata saves 0x25 bytes of each.
Single items read by name: 2 the heli-pack (hero jump code), 6 the O2 mask (no air
loss when swimming, Fred gives it on Pokitaru), 33 shifts map ids by 0x100
(pick_next_map), 35 the vendor discount. */
extern u8 item_available[37] __asm__("D_0013D4C0");
#define ITEM_HELI_PACK 2
#define ITEM_O2_MASK 6
#define ITEM_MAP_SHIFT 33
#define ITEM_VENDOR_DISCOUNT 35
extern u8 item_text_variant[40] __asm__("D_0013E520");

extern u8 D_0015EDD0[] __attribute__((sda));
extern s32 D_0014C190_257218[][64] __asm__("D_0014C190");
extern u8 items_acquired[] __asm__("D_0013D4E8");
extern s32 pause_iop_sprite_lists[] __asm__("D_00141EA0");
extern u8 D_0015EDD0[] __attribute__((sda));
extern u8 items_acquired[37] __asm__("D_0013D4E8");
/* Per-weapon totals (37 items, mc_gamedata blocks 0x3E8-0x3EA of 0x94 bytes). */
extern s32 ammo_bought_stats[37] __asm__("D_0013DD70");
extern s32 weapon_ammo_pickup_totals[37] __asm__("D_0013DE08");
extern s32 weapon_ammo_used_counts[37] __asm__("D_0013DEA0");
extern s32 pause_iop_sprite_lists[8] __asm__("D_00141EA0");
extern s32 D_00141660;

#endif /* LOMBYTE_RNC_GAME_ITEM_STATE_H */
4 changes: 3 additions & 1 deletion include/rnc/game/level_object_states.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ struct LevelObjectState {
s32 state; /* 0xC: 0 untouched, set to 1 once triggered; mission checks also test >= 2 */
};

extern struct LevelObjectState level_object_states[] __asm__("D_0013D5B0");
/* mc_gamedata saves the whole table: 0x790 bytes, 121 records. */
#define LEVEL_OBJECT_STATE_COUNT 121
extern struct LevelObjectState level_object_states[LEVEL_OBJECT_STATE_COUNT] __asm__("D_0013D5B0");

#endif /* LOMBYTE_RNC_GAME_LEVEL_OBJECT_STATES_H */
39 changes: 39 additions & 0 deletions include/rnc/game/level_progress.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#ifndef LOMBYTE_RNC_GAME_LEVEL_PROGRESS_H
#define LOMBYTE_RNC_GAME_LEVEL_PROGRESS_H

#include "types.h"
#include "rnc/game/bolt_sources.h"

/* Per-level progress records, one row per level slot (20; the level save
file holds 20 records, memcard_make_whole_save). The save table
mc_leveldata lists each array with its row size. */
#define LEVEL_RECORD_COUNT 20

/* Per-level counters of the main save (mc_gamedata saves 0x50 bytes of each). */
extern s32 D_0013D510[LEVEL_RECORD_COUNT];
/* Best coverage result save_map_coverage got per level (one slot per level record). */
extern s32 max_coverage_save_result_by_level[LEVEL_RECORD_COUNT] __asm__("D_0013D560");
/* Per-level counters the hero code bumps; mc_leveldata saves 4 bytes of each per level. */
extern s32 level_bolts[LEVEL_RECORD_COUNT] __asm__("D_0013DF38"); /* bolts collected per level */
extern s32 D_0013DF88[LEVEL_RECORD_COUNT];
extern s32 hero_respawn_counts_by_level[LEVEL_RECORD_COUNT] __asm__("D_0013DFD8");

/* Explored map pages: save_map_coverage packs one 0x800-byte page per level. */
#define MAP_COVERAGE_PAGE_SIZE 0x800
extern u8 map_coverage_pages[LEVEL_RECORD_COUNT * MAP_COVERAGE_PAGE_SIZE] __asm__("D_00141EC0");
/* Gold bolts collected, 4 per level, indexed level * 4 + bolt. */
extern u8 gold_bolts_collected[LEVEL_RECORD_COUNT * 4] __asm__("D_0014BEC0");
/* Buried bolt states dug up with the metal detector, 16 bytes per level. */
extern u8 buried_bolt_states[LEVEL_RECORD_COUNT * 16] __asm__("D_0014BF10");
/* Mission state per level slot (0xFF: done), indexed slot + level * 16. */
extern unsigned char visited52[LEVEL_RECORD_COUNT * 16] __asm__("D_0014C050");
/* One bit per moby save id, per level. */
extern s32 D_0014C190_257218[LEVEL_RECORD_COUNT][64] __asm__("D_0014C190");
/* bolt_source_stats (D_0014D590, rnc/game/bolt_sources.h) follows. */
/* Hero respawns per level and damage source category; level code counts them. */
extern s32
hero_respawn_counts_by_level_and_source_category[LEVEL_RECORD_COUNT][16] __asm__("D_0014E990");
/* Per-mission counters the level loader clears (16 slots). */
extern s32 D_0014EE90[16];

#endif /* LOMBYTE_RNC_GAME_LEVEL_PROGRESS_H */
5 changes: 3 additions & 2 deletions include/rnc/game/level_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@

#include "types.h"
#include "sda.h"
#include "rnc/game/level_progress.h"

/*
* Per-level flags of the save state, one byte per level index. The level
* loops (map selection, marker drawing, memory card save) run to index 19,
* and the two tables sit 0x18 bytes apart, each padded to a word.
*/
extern u8 level_available[20] __asm__("D_0013DD40") NOT_SDA; /* shows the level on the map */
extern u8 level_visit_state[20] __asm__("D_0013DD58") NOT_SDA; /* 0 new, 1 entered, 2 done */
extern u8 level_available[LEVEL_RECORD_COUNT] __asm__("D_0013DD40") NOT_SDA; /* shows the level on the map */
extern u8 level_visit_state[LEVEL_RECORD_COUNT] __asm__("D_0013DD58") NOT_SDA; /* 0 new, 1 entered, 2 done */

#endif /* LOMBYTE_RNC_GAME_LEVEL_STATE_H */
1 change: 0 additions & 1 deletion include/rnc/game/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

#include "types.h"

extern int pause_sound_volume __asm__("D_0013E5A0") __attribute__((section(".data")));
extern u8 big_head_cheat_enabled __asm__("D_0015EDB0");
extern unsigned char opt_mirror_anim __asm__("D_0015EDB5");
extern int invert52 __asm__("D_0015EDDC");
Expand Down
4 changes: 4 additions & 0 deletions include/rnc/mobys/animation.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
struct InterpolatedAnim;

s32 is_value_within_interpolated_window(struct InterpolatedAnim *, f32) __asm__("FUN_00214cc8");
/* cos and sin of k * 2pi / 256; process_moby_anim_data copies it whole (0x800 bytes)
into scratchpad for the moby and tfrag lighting code. */
extern f32 normal_lut[256][2] __asm__("D_00165500");

s32 queue_animation_update(s32, s32, s32, s32, s32, s32, s32) __asm__("FUN_001ff308");

#endif /* LOMBYTE_RNC_MOBYS_ANIMATION_H */
3 changes: 0 additions & 3 deletions include/rnc/rendering/render_globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,6 @@ extern f32 fog_far_intensity __asm__("D_0015F494");
extern s32 part_clip_dist __asm__("D_001600BC");
extern char textured_quad_header[] __asm__("D_00160840");
extern s32 current_vu_chain __asm__("D_00160F0C");
extern s32 surface_height_tiles __asm__("D_00161190");
extern s32 occl_cell_table __asm__("D_00161194");
extern s32 occl_cell_count __asm__("D_00161198");
/* Draw callbacks and their arguments: add_draw_callback and
enqueue_callback_list_4 take at most 0x40 of each. */
extern void (*draw_callback_funcs[0x40])(s32) __asm__("D_0018DB40");
Expand Down
9 changes: 9 additions & 0 deletions include/rnc/save/memory_card_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -196,4 +196,13 @@ struct MemoryCardState {

extern struct MemoryCardState memory_card_state __asm__("D_0013D290");

/* The save directory and file paths; memcard_get_name writes the disc's
region and product code over the '*'s of each. */
extern char save_directory_path[] __asm__("D_0013D1D0");
extern char save_directory_pattern[] __asm__("D_0013D1E8");
extern char save_icon_sys_path[] __asm__("D_0013D200");
extern char save_icon_path[] __asm__("D_0013D220");
extern char save_main_file_path[] __asm__("D_0013D240");
extern char save_slot_path_format[] __asm__("D_0013D270");

#endif /* LOMBYTE_RNC_SAVE_MEMORY_CARD_STATE_H */
11 changes: 7 additions & 4 deletions include/rnc/ui/map/level_map.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@ typedef struct {
s32 label_offset_y;
} LevelMapMarker;

/* One per level id: the level select menu prints description_text and
label_text (draw_menu_selection_text), the map prints label_text. */
typedef struct {
s32 description_text;
s32 label_text;
s32 pad4[2];
} LevelMapMarkerText;
s32 unk8;
} LevelSelectText;

extern LevelMapMarkerText level_map_labels[19] __asm__("D_001DDD44");
extern LevelMapMarker level_map_markers[20] __asm__("D_001DDE28");
extern LevelSelectText level_select_texts[19] __asm__("D_001DDD40");
extern LevelMapMarker level_map_markers[20] __asm__("D_001DDE28");

#endif /* LOMBYTE_RNC_UI_MAP_LEVEL_MAP_H */
13 changes: 13 additions & 0 deletions include/rnc/world/collision/surface_height_grid.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ typedef struct {
f32 cell_height;
} SurfaceHeightGrid;

/* One occlusion zone's box, in 1/1024 units and 0x800 deep. */
typedef struct {
int x;
int y;
int z;
unsigned short w;
unsigned short h;
} ZoneBox;

typedef struct {
f32 samples[16][16];
f32 pad_400[0x20];
Expand All @@ -34,5 +43,9 @@ typedef struct {
} SurfaceHeightTile;

extern SurfaceHeightGrid surface_height_grid __asm__("D_001E66E0");
/* The level's zones: occl_cell_count boxes and one height tile each. */
extern SurfaceHeightTile *surface_height_tiles __asm__("D_00161190");
extern ZoneBox *occl_cell_table __asm__("D_00161194");
extern s32 occl_cell_count __asm__("D_00161198");

#endif /* LOMBYTE_RNC_WORLD_COLLISION_SURFACE_HEIGHT_GRID_H */
21 changes: 12 additions & 9 deletions src/audio/banks/snd_bank_load_by_loc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
#include "rnc/sdk/libc/stdio.h"
#include "rnc/sdk/rpc/rpc.h"

extern s32 snd_cd_bank_load_request[] __asm__("D_00137B40");
extern char snd_non_idle_error_string[] __asm__("D_00153D20");
extern u8 snd_bank_load_by_loc_rpc_error_string[] __asm__("D_00153DF8");
extern u8 sound_stream_client[] __asm__("D_0015EBE8");
extern s32 snd_cd_load_error __asm__("D_0015EC88") __attribute__((sda));
extern u32 snd_cd_callback_arg __asm__("D_0015ED00");
extern s32 snd_stream_safe_cd_sync(s32) __asm__("func_0012EE08");
extern void snd_flush_sound_commands(void) __asm__("func_0012DC80");
extern void FlushCache(s32);
extern s32 snd_cd_bank_load_request[] __asm__("D_00137B40");
extern char snd_non_idle_error_string[] __asm__("D_00153D20");
extern const char snd_bank_load_by_loc_rpc_error_string[] __asm__("D_00153DF8");
extern u8 sound_stream_client[] __asm__("D_0015EBE8");
extern s32 snd_cd_load_error __asm__("D_0015EC88") __attribute__((sda));
extern u32 snd_cd_callback_arg __asm__("D_0015ED00");
extern s32 snd_stream_safe_cd_sync(s32) __asm__("func_0012EE08");
extern void snd_flush_sound_commands(void) __asm__("func_0012DC80");
extern void FlushCache(s32);

s32 snd_bank_load_by_loc(s32 location, s32 byte_offset) __asm__("FUN_0012df20");

Expand Down Expand Up @@ -49,3 +49,6 @@ s32 snd_bank_load_by_loc(s32 location, s32 byte_offset) {
}

extern __typeof__(snd_bank_load_by_loc) func_0012DF20 __attribute__((alias("FUN_0012df20")));

const char snd_bank_load_by_loc_rpc_error_string[] __asm__("D_00153DF8") =
"989snd.c: RPC call has failed inside snd_BankLoadByLoc\n";
7 changes: 5 additions & 2 deletions src/audio/banks/snd_bank_load_from_ee_cb.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ extern s64 snd_cd_callback_data __asm__("D_0015ECD8");
extern u32 snd_cd_callback_arg __asm__("D_0015ED00");
extern s32 snd_cd_bank_load_request[4] __asm__("D_00137B40");
extern u8 sound_stream_client[] __asm__("D_0015EBE8");
extern char snd_bank_load_from_ee_progress_string[] __asm__("D_00153EC0");
extern char snd_bank_load_from_ee_cd_busy_string[] __asm__("D_00153EF8");
extern char snd_non_idle_error_string[] __asm__("D_00153D20");
extern s32 snd_stream_safe_cd_sync(s32) __asm__("func_0012EE08");
extern s32 snd_flush_sound_commands(void) __asm__("func_0012DC80");
Expand All @@ -20,6 +18,11 @@ extern s32 FlushCache(s32);
// HI16/LO16 pair instead of a gp-relative reference.
void snd_bank_load_from_ee_cb(s32 cmd, s32 arg, s64 data) __asm__("FUN_0012e088");

const char snd_bank_load_from_ee_progress_string[] __asm__("D_00153EC0") =
"snd_BankLoadFromEE_CB: Load already in progress!\n";
const char snd_bank_load_from_ee_cd_busy_string[] __asm__("D_00153EF8") =
"snd_BankLoadFromEE_CB: CD BUSY!\n";

void snd_bank_load_from_ee_cb(s32 cmd, s32 callback_address, s64 callback_user_data) {
snd_cd_load_error = 0;
if (snd_cd_callback_pending != 0) {
Expand Down
Loading
Loading