diff --git a/Makefile b/Makefile index 5c102e1a..115f8d1d 100755 --- a/Makefile +++ b/Makefile @@ -193,22 +193,18 @@ CFLAGS := -G 0 -non_shared -verbose -Xcpluscomm -nostdinc -Wab,-r4300_mul CFLAGS += $(C_DEFINES) CFLAGS += $(INCLUDE_CFLAGS) -CHECK_WARNINGS := -Wall -Wextra -Werror-implicit-function-declaration -Wno-format-security -Wno-unknown-pragmas -Wno-unused-parameter -Wno-missing-braces \ - -Wno-main -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -Wno-switch -Wno-pointer-sign +CHECK_WARNINGS := -Wall -Wextra -Wno-unknown-pragmas -Wno-unused-parameter -Wno-switch -Werror-implicit-function-declaration ifeq ($(DETECTED_OS), macos) - CHECK_WARNINGS += -Wno-constant-conversion -Wno-for-loop-analysis - # Disable GCC complaining about fakematches necessary to match if building a matching ROM. Example: "var2 = (0, var1)" ifeq ($(NON_MATCHING),0) CHECK_WARNINGS += -Wno-unused-value -Wno-deprecated-non-prototype -Wno-array-bounds -Wno-self-assign -Wno-uninitialized -Wno-unused-but-set-variable -Wno-unused-variable + CHECK_WARNINGS += -Wno-pointer-to-int-cast -Wno-constant-conversion -Wno-int-to-pointer-cast endif else - CHECK_WARNINGS += -Wno-builtin-declaration-mismatch - # Disable GCC complaining about fakematches necessary to match if building a matching ROM. Example: "var2 = (0, var1)" ifeq ($(NON_MATCHING),0) - CHECK_WARNINGS += -Wno-unused-value -Wno-array-bounds -Wno-uninitialized -Wno-unused-but-set-variable -Wno-unused-variable + CHECK_WARNINGS += -Wno-unused-variable -Wno-unused-value -Wno-unused-but-set-variable endif endif -CC_CHECK := $(GCC) -fsyntax-only -fno-builtin -funsigned-char $(C_STANDARD) -DAVOID_UB -D_LANGUAGE_C -DNON_MATCHING -DNON_EQUIVALENT $(CHECK_WARNINGS) $(INCLUDE_CFLAGS) $(C_DEFINES) $(GCC_COLOR) +CC_CHECK := $(GCC) -fsyntax-only -fno-builtin -funsigned-char $(C_STANDARD) -DAVOID_UB -DCC_CHECK -D_LANGUAGE_C -DNON_MATCHING -DNON_EQUIVALENT $(CHECK_WARNINGS) $(INCLUDE_CFLAGS) $(C_DEFINES) $(GCC_COLOR) # Only add -m32 for x86_64 machines. ifneq ($(filter x86_64%,$(UNAME_M)),) diff --git a/include/level_object_entries.h b/include/level_object_entries.h index 24bbea94..844e9692 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -887,7 +887,7 @@ typedef struct LevelObjectEntry_Unknown127 { typedef struct LevelObjectEntry_Hud { LevelObjectEntryCommon common; - s32 unk8; + s32 offsetY; } LevelObjectEntry_Hud; typedef struct LevelObjectEntry { diff --git a/include/macros.h b/include/macros.h index 061f7106..741024cb 100644 --- a/include/macros.h +++ b/include/macros.h @@ -47,7 +47,7 @@ #endif // Use built-in pseudocode where possible in NON_MATCHING builds -#ifdef __GNUC__ +#if defined(__GNUC__) && !defined(CC_CHECK) #define abs(x) __builtin_abs(x) #define fabsf(x) __builtin_fabsf(x) #define sqrtf(f) __builtin_sqrtf(f) @@ -75,7 +75,7 @@ #define INCONSISTENT // Used to make a u32 colour value look clearer. Transforms 0xFF0000FF to 255, 0, 0, 255 -#define COLOUR_RGBA32(r, g, b, a) (((r << 24) | (g << 16) | (b << 8) | a)) +#define COLOUR_RGBA32(r, g, b, a) ((u32)((r << 24) | (g << 16) | (b << 8) | a)) // A few systems in the game use an array as a cache table. This gives you the asset ID #define ASSETCACHE_ID(x) ((x << 1) + 0) diff --git a/libultra/src/debug/assert.c b/libultra/src/debug/assert.c index ffdb5eee..b900db31 100644 --- a/libultra/src/debug/assert.c +++ b/libultra/src/debug/assert.c @@ -2,6 +2,14 @@ #include "PRinternal/osint.h" #include "osint_debug.h" + +/************ .rodata ************/ + +const char D_800E8E70[] = "\nAssertion failed: '%s' in file %s, line %d\n"; +const char D_800E8EA0[] = "\nAssertion failed: '%s' in file %s, line %d\n"; + +/*********************************/ + void __assertBreak(void); void __assert(const char* exp, const char* filename, int line) { diff --git a/src/audio.h b/src/audio.h index 9e56df4c..4e67fb0d 100644 --- a/src/audio.h +++ b/src/audio.h @@ -74,7 +74,7 @@ void music_jingle_voicelimit_set(u8 voiceLimit); void music_fade(s32 time); void music_volume_reset(void); void sound_update_queue(u8 updateRate); -void sound_play_delayed(u16 soundId, SoundHandle *soundMask, f32 delayTime); +void sound_play_delayed(u16 soundId, SoundHandle *handlePtr, f32 delayTime); void sound_clear_delayed(void); u16 music_channel_get_mask(void); void music_dynamic_set(u16 channelMask); @@ -106,7 +106,7 @@ void music_jingle_pan_set(ALPan pan); void music_jingle_play(u8 seqID); u32 music_jingle_playing(void); u16 sound_distance(u16 soundId); -void sound_play_spatial(u16 soundID, f32 x, f32 y, f32 z, SoundHandle *soundMask); +void sound_play_spatial(u16 soundID, f32 x, f32 y, f32 z, SoundHandle *handlePtr); void func_80001F14(u16 soundID, SoundHandle *handlePtr); u16 sound_count(void); u8 music_sequence_count(void); @@ -118,7 +118,7 @@ void music_sequence_stop(ALCSPlayer *seqPlayer); void sound_reverb_set(u8 setting); void alSeqFileNew(ALSeqFile *file, u8 *base); void func_80063A90(ALCSPlayer *seqp, u8 channel); -void sound_volume_set_relative(u16 soundID, SoundHandle soundState, u8 volume); +void sound_volume_set_relative(u16 soundID, SoundHandle soundHandle, u8 volume); void music_sequence_init(ALCSPlayer *seqp, void *sequence, u8 *seqID, ALCSeq *seq); void sound_play(u16 soundID, SoundHandle* handlePtr); void sound_play(u16 soundID, SoundHandle* handlePtr); diff --git a/src/audio_spatial.h b/src/audio_spatial.h index 1e7b4ee7..699d0e97 100644 --- a/src/audio_spatial.h +++ b/src/audio_spatial.h @@ -58,26 +58,26 @@ typedef struct ReverbLine { void audspat_jingle_on(void); void audspat_point_stop(AudioPoint *); void audspat_jingle_off(void); -void audspat_point_create(u16 soundBite, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, u8 volume, u16 distance, u8 arg8, u8 pitch, - u8 argA, AudioPoint **handlePtr); +void audspat_point_create(u16 soundBite, f32 x, f32 y, f32 z, u8 flags, u8 minVolume, u8 volume, u16 range, u8 fastFalloff, u8 pitch, + u8 priority, AudioPoint **handlePtr); void audspat_play_sound_at_position(u16 soundId, f32 x, f32 y, f32 z, u8 flags, AudioPoint **handlePtr); -void audspat_point_stop_by_index(s32 arg0); +void audspat_point_stop_by_index(s32 index); s32 audspat_calculate_spatial_pan(f32, f32, s32); -void audspat_play_sound_direct(u16 soundId, f32 x, f32 y, f32 z, u8 arg4, u8 arg5, f32 pitch, AudioPoint **handlePtr); -void audspat_line_add_vertex(u8 arg0, u16 soundId, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u16 arg9, - u8 argA, u8 lineID, u8 argC); -s32 audspat_line_validate(u8 arg0); +void audspat_play_sound_direct(u16 soundBite, f32 x, f32 y, f32 z, u8 flags, u8 volume, f32 pitch, AudioPoint **handlePtr); +void audspat_line_add_vertex(u8 type, u16 soundBite, f32 x, f32 y, f32 z, u8 arg5, u8 arg6, u8 arg7, u8 priority, u16 arg9, + u8 argA, u8 lineID, u8 vertexIndex); +s32 audspat_line_validate(u8 lineID); void audspat_debug_render_line(Gfx **dList, Vertex **verts, Triangle **tris, f32 coords[6], u8 red, u8 green, u8 blue); void func_80006BFC(Object *obj, ObjectSegment *segment, Object *obj2, s32 updateRate); -void audspat_point_set_position(AudioPoint *arg0, f32 x, f32 y, f32 z); -s32 audspat_reverb_validate(u8 arg0); +void audspat_point_set_position(AudioPoint *audioPoint, f32 x, f32 y, f32 z); +s32 audspat_reverb_validate(u8 reverbLineID); void audspat_init(void); void audspat_reverb_add_vertex(f32, f32, f32, u8, u8, u8); -void audspat_calculate_echo(SoundHandle soundState, f32 x, f32 y, f32 z); +void audspat_calculate_echo(SoundHandle soundHandle, f32 x, f32 y, f32 z); s32 audspat_distance_to_segment(f32 inX, f32 inY, f32 inZ, f32 coords[6], f32 *outX, f32 *outY, f32 *outZ); void audspat_reset(void); -void audspat_update_all(Object **arg0, s32 numRacers, s32 updateRate); // Non Matching +void audspat_update_all(Object **objList, s32 numObjects, s32 updateRate); // Non Matching void func_80006FC8(Object **objs, s32 numRacers, ObjectSegment *segment, u8 arg3, s32 updateRate); // Non Matching u8 audspat_reverb_get_strength_at_point(ReverbLine *, f32, f32, f32); diff --git a/src/audiosfx.h b/src/audiosfx.h index 6bc66aa5..f8e5da9b 100644 --- a/src/audiosfx.h +++ b/src/audiosfx.h @@ -117,23 +117,23 @@ extern void alEvtqPostEvent(ALEventQueue *evtq, ALEvent *evt, ALMicroTime delta) void sndp_set_global_volume(u32 volume); s32 sndp_get_global_volume(void); -void sndp_set_active_sound_limit(s32 numChannels); +void sndp_set_active_sound_limit(s32 numSounds); void sndp_init_player(audioMgrConfig *c); ALMicroTime sndp_voice_handler(void *node); void sndp_end(ALSoundState *state); u16 sndp_get_state_counts(u16 *numFree, u16 *numAllocated); void sndp_set_priority(ALSoundState *sndp, u8 priority); -ALSoundState *sndp_play(ALBank *bnk, s16 sndIndx, SoundHandle *soundMask); +ALSoundState *sndp_play(ALBank *bnk, s16 sndIndx, SoundHandle *handlePtr); void sndp_stop_all_looped(void); -void sndp_set_param(SoundHandle soundMask, s16 type, u32 volume); -u16 sndp_get_group_volume(u8 channel); -void sndp_set_group_volume(u8 channel, u16 volume); -void sndp_apply_pitch_slide(ALSoundState *voiceState); -void sndp_stop_with_flags(u8 event); -void sndp_stop(SoundHandle soundMask); -ALSoundState *sndp_allocate(UNUSED ALBank *arg0, ALSound *arg1); +void sndp_set_param(SoundHandle soundMask, s16 type, u32 paramValue); +u16 sndp_get_group_volume(u8 groupID); +void sndp_set_group_volume(u8 groupID, u16 volume); +void sndp_apply_pitch_slide(ALSoundState *soundState); +void sndp_stop_with_flags(u8 flags); +void sndp_stop(SoundHandle state); +ALSoundState *sndp_allocate(UNUSED ALBank *arg0, ALSound *sound); void sndp_deallocate(ALSoundState *); -ALSoundState *sndp_play_with_priority(ALBank *bnk, s16 sndIndx, u8 priority, SoundHandle *soundMask); +ALSoundState *sndp_play_with_priority(ALBank *bank, s16 sndIndx, u8 priority, SoundHandle *handlePtr); void sndp_handle_event(SoundPlayer *sndp, ALSndpEvent *event); #endif diff --git a/src/camera.h b/src/camera.h index a7f303f8..5bd59b4d 100644 --- a/src/camera.h +++ b/src/camera.h @@ -130,6 +130,6 @@ void copy_viewports_to_stack(void); void apply_head_turning_matrix(Gfx **dList, MatrixS **mtx, Object_68 *objGfx, s16 headAngle); void apply_object_shear_matrix(Gfx **dList, MatrixS **mtx, Object *arg2, Object *arg3, f32 shear); void camera_init(void); -void viewport_main(Gfx **dList, MatrixS **mats); +void viewport_main(Gfx **dlist, MatrixS **mats); #endif diff --git a/src/fade_transition.c b/src/fade_transition.c index 7b7b5c8c..293ce955 100644 --- a/src/fade_transition.c +++ b/src/fade_transition.c @@ -39,13 +39,17 @@ Gfx dTransitionFadeSettings[] = { }; Vec2s gTransitionBarnHorizontalCoords[14] = { - { -480, 120 }, { -320, 120 }, { -160, 120 }, { 0, 120 }, { 160, 120 }, { 320, 120 }, { 480, 120 }, - { -480, -120 }, { -320, -120 }, { -160, -120 }, { 0, -120 }, { 160, -120 }, { 320, -120 }, { 480, -120 }, + { { { -480, 120 } } }, { { { -320, 120 } } }, { { { -160, 120 } } }, { { { 0, 120 } } }, + { { { 160, 120 } } }, { { { 320, 120 } } }, { { { 480, 120 } } }, { { { -480, -120 } } }, + { { { -320, -120 } } }, { { { -160, -120 } } }, { { { 0, -120 } } }, { { { 160, -120 } } }, + { { { 320, -120 } } }, { { { 480, -120 } } }, }; Vec2s gTransitionBarnVerticalCoords[14] = { - { -160, 360 }, { -160, 240 }, { -160, 120 }, { -160, 0 }, { -160, -120 }, { -160, -240 }, { -160, -240 }, - { 160, 360 }, { 160, 240 }, { 160, 120 }, { 160, 0 }, { 160, -120 }, { 160, -240 }, { 160, -240 }, + { { { -160, 360 } } }, { { { -160, 240 } } }, { { { -160, 120 } } }, { { { -160, 0 } } }, + { { { -160, -120 } } }, { { { -160, -240 } } }, { { { -160, -240 } } }, { { { 160, 360 } } }, + { { { 160, 240 } } }, { { { 160, 120 } } }, { { { 160, 0 } } }, { { { 160, -120 } } }, + { { { 160, -240 } } }, { { { 160, -240 } } }, }; TriangleList D_800E32A0[12] = { @@ -65,8 +69,9 @@ u8 gTransitionBarnDoorAlpha[12] = { }; Vec2s gTransitionBarnDiagCoords[12] = { - { -800, 120 }, { -480, 120 }, { -160, 120 }, { 160, 120 }, { 480, 120 }, { 800, 120 }, - { -800, -120 }, { -480, -120 }, { -160, -120 }, { 160, -120 }, { 480, -120 }, { 800, -120 }, + { { { -800, 120 } } }, { { { -480, 120 } } }, { { { -160, 120 } } }, { { { 160, 120 } } }, + { { { 480, 120 } } }, { { { 800, 120 } } }, { { { -800, -120 } } }, { { { -480, -120 } } }, + { { { -160, -120 } } }, { { { 160, -120 } } }, { { { 480, -120 } } }, { { { 800, -120 } } }, }; TriangleList D_800E330C[12] = { @@ -86,15 +91,22 @@ u8 gTransitionBarnDoorDiagAlpha[12] = { }; Vec2s gTransitionWaveCoords[63] = { - { -160, 160 }, { -144, 160 }, { -128, 160 }, { -112, 160 }, { -96, 160 }, { -80, 160 }, { -64, 160 }, - { -48, 160 }, { -32, 160 }, { -16, 160 }, { 0, 160 }, { 16, 160 }, { 32, 160 }, { 48, 160 }, - { 64, 160 }, { 80, 160 }, { 96, 160 }, { 112, 160 }, { 128, 160 }, { 144, 160 }, { 160, 160 }, - { -160, -200 }, { -144, -160 }, { -128, -140 }, { -112, -130 }, { -96, -140 }, { -80, -200 }, { -64, -240 }, - { -48, -260 }, { -32, -270 }, { -16, -260 }, { 0, -220 }, { 16, -210 }, { 32, -200 }, { 48, -210 }, - { 64, -220 }, { 80, -260 }, { 96, -270 }, { 112, -260 }, { 128, -220 }, { 144, -160 }, { 160, -140 }, - { -160, -280 }, { -144, -280 }, { -128, -280 }, { -112, -280 }, { -96, -280 }, { -80, -280 }, { -64, -280 }, - { -48, -280 }, { -32, -280 }, { -16, -280 }, { 0, -280 }, { 16, -280 }, { 32, -280 }, { 48, -280 }, - { 64, -280 }, { 80, -280 }, { 96, -280 }, { 112, -280 }, { 128, -280 }, { 144, -280 }, { 160, -280 } + { { { -160, 160 } } }, { { { -144, 160 } } }, { { { -128, 160 } } }, { { { -112, 160 } } }, + { { { -96, 160 } } }, { { { -80, 160 } } }, { { { -64, 160 } } }, { { { -48, 160 } } }, + { { { -32, 160 } } }, { { { -16, 160 } } }, { { { 0, 160 } } }, { { { 16, 160 } } }, + { { { 32, 160 } } }, { { { 48, 160 } } }, { { { 64, 160 } } }, { { { 80, 160 } } }, + { { { 96, 160 } } }, { { { 112, 160 } } }, { { { 128, 160 } } }, { { { 144, 160 } } }, + { { { 160, 160 } } }, { { { -160, -200 } } }, { { { -144, -160 } } }, { { { -128, -140 } } }, + { { { -112, -130 } } }, { { { -96, -140 } } }, { { { -80, -200 } } }, { { { -64, -240 } } }, + { { { -48, -260 } } }, { { { -32, -270 } } }, { { { -16, -260 } } }, { { { 0, -220 } } }, + { { { 16, -210 } } }, { { { 32, -200 } } }, { { { 48, -210 } } }, { { { 64, -220 } } }, + { { { 80, -260 } } }, { { { 96, -270 } } }, { { { 112, -260 } } }, { { { 128, -220 } } }, + { { { 144, -160 } } }, { { { 160, -140 } } }, { { { -160, -280 } } }, { { { -144, -280 } } }, + { { { -128, -280 } } }, { { { -112, -280 } } }, { { { -96, -280 } } }, { { { -80, -280 } } }, + { { { -64, -280 } } }, { { { -48, -280 } } }, { { { -32, -280 } } }, { { { -16, -280 } } }, + { { { 0, -280 } } }, { { { 16, -280 } } }, { { { 32, -280 } } }, { { { 48, -280 } } }, + { { { 64, -280 } } }, { { { 80, -280 } } }, { { { 96, -280 } } }, { { { 112, -280 } } }, + { { { 128, -280 } } }, { { { 144, -280 } } }, { { { 160, -280 } } } }; u8 D_800E3440[92] = { diff --git a/src/game_ui.c b/src/game_ui.c index 091f9dd8..dbb64cc2 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -23,93 +23,143 @@ /************ .data ************/ -// Unused? UNUSED s32 D_800E1E60 = 0; +// clang-format off // Base positions of all onscreen hud elements HudElement gHudElementBase[HUD_ELEMENT_COUNT] = { - { 0, 0, 0, HUD_ASSET_0, 1.0f, 53.0f, 16.0f, 0.0f, 0, 0, 127, 0, 0 }, - { 0, 0, 0, HUD_ASSET_3, 1.0f, 54.0f, 18.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_WEAPONS, 0.4f, -120.0f, -68.0f, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_6, 1.0f, 104.0f, 16.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 93.0f, 31.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_4, 1.0f, 104.0f, 32.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 114.0f, 31.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_BANANA_ANIM, 0.5f, -3.0f, 73.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 182.0f, 22.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 192.0f, 22.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_13, 1.0f, 239.0f, 16.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 206.0f, 31.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_GO_BIG, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_GET_READY, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_FINISH, 1.0f, -200.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_MAP_DOT, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_CHEQUER_FLAG, 1.0f, -50.0f, 87.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_RETICLE, 2.0f, -50.0f, 87.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_18, 1.0f, 167.0f, 22.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_GOLD_BALLOON, 1.0f, -127.0f, 88.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_18, 1.0f, 52.0f, 27.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 67.0f, 27.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 77.0f, 27.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS, 1.0f, 221.0f, 48.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_6, 1.0f, 188.0f, 48.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS_SMALL, 1.0f, 206.0f, 48.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_20, 0.4f, -105.0f, -98.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_BANANA_STATIC, 0.5f, -3.0f, 73.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_23, 1.0f, -8.0f, 97.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_LAP_FINAL, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_LAP_LAP, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_LAP_2, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_2, 1.0f, 25.0f, 48.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_INDICATOR_TURN_90, 1.0f, -120.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_34, 0.4f, -105.0f, -98.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_WRONG, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_WAY, 1.0f, 0.0f, 30.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_PRO_AM, 1.0f, 80.0f, -60.0f, 0.0f, 0, 0, 0, 0, 0 }, // Unused - { 0, 0, 0x6490, HUD_SPRITE_SPEEDOMETRE_ARROW, 0.5f, 122.0f, -71.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_47, 0.75f, 247.0f, 212.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_48, 1.0f, 234.0f, 196.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_49, 1.0f, 232.0f, 177.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_50, 1.0f, 240.0f, 159.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_51, 1.0f, 256.0f, 146.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_52, 1.0f, 275.0f, 143.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_53, 1.0f, 246.0f, 156.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_54, 0.7272f, 27.0f, 142.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_0, 1.0f, -200.0f, 70.0f, 0.0f, 0, 0, 129, 0, 0 }, - { 0, 0, 0, HUD_ASSET_3, 1.0f, -175.0f, 72.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_WEAPON_NUMBER, 1.0f, -99.0f, -89.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_PORTRAIT, 0.76f, 43.0f, 20.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_66, 1.0f, 40.0f, 54.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_BANANA_ANIM, 0.375f, -117.0f, 46.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_28, 1.0f, 51.0f, 56.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS_SMALL, 1.0f, 60.0f, 57.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_ASSET_NUMBERS_SMALL, 1.0f, 69.0f, 57.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_PLACE_1, 1.0f, -160.0f, 5.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_PORTRAIT, 1.0f, 260.0f, 16.0f, 0.0f, 0, 0, 0, 0, 0 }, - { 0, 0, 0, HUD_SPRITE_PLACE_ST, 1.0f, 160.0f, 5.0f, 0.0f, 0, 0, 0, 0, 0 }, + { { { { 0, 0, 0 } } }, HUD_ASSET_0, 1.0f, { { { 53.0f, 16.0f, 0.0f } } }, 0, { { 0, 127, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_3, 1.0f, { { { 54.0f, 18.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_WEAPONS, 0.4f, { { { -120.0f, -68.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_6, 1.0f, { { { 104.0f, 16.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 93.0f, 31.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_4, 1.0f, { { { 104.0f, 32.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 114.0f, 31.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_BANANA_ANIM, 0.5f, { { { -3.0f, 73.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 182.0f, 22.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 192.0f, 22.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_13, 1.0f, { { { 239.0f, 16.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 206.0f, 31.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_GO_BIG, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_GET_READY, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_FINISH, 1.0f, { { { -200.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_MAP_DOT, 1.0f, { { { 0.0f, 0.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_CHEQUER_FLAG, 1.0f, { { { -50.0f, 87.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_RETICLE, 2.0f, { { { -50.0f, 87.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_18, 1.0f, { { { 167.0f, 22.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_GOLD_BALLOON, 1.0f, { { { -127.0f, 88.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_18, 1.0f, { { { 52.0f, 27.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 67.0f, 27.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 77.0f, 27.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS, 1.0f, { { { 221.0f, 48.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_6, 1.0f, { { { 188.0f, 48.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS_SMALL, 1.0f, { { { 206.0f, 48.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_20, 0.4f, { { { -105.0f, -98.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_BANANA_STATIC, 0.5f, { { { -3.0f, 73.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_23, 1.0f, { { { -8.0f, 97.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_LAP_FINAL, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_LAP_LAP, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_LAP_2, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_2, 1.0f, { { { 25.0f, 48.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_INDICATOR_TURN_90, 1.0f, { { { -120.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_34, 0.4f, { { { -105.0f, -98.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_WRONG, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_WAY, 1.0f, { { { 0.0f, 30.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_PRO_AM, 1.0f, { { { 80.0f, -60.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, // Unused + { { { { 0, 0, 0x6490 } } }, HUD_SPRITE_SPEEDOMETRE_ARROW, 0.5f, { { { 122.0f, -71.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_47, 0.75f, { { { 247.0f, 212.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_48, 1.0f, { { { 234.0f, 196.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_49, 1.0f, { { { 232.0f, 177.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_50, 1.0f, { { { 240.0f, 159.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_51, 1.0f, { { { 256.0f, 146.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_52, 1.0f, { { { 275.0f, 143.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_53, 1.0f, { { { 246.0f, 156.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_54, 0.7272f, { { { 27.0f, 142.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_0, 1.0f, { { { -200.0f, 70.0f, 0.0f } } }, 0, { { 0, 129, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_3, 1.0f, { { { -175.0f, 72.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_WEAPON_NUMBER, 1.0f, { { { -99.0f, -89.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_PORTRAIT, 0.76f, { { { 43.0f, 20.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_66, 1.0f, { { { 40.0f, 54.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_BANANA_ANIM, 0.375f, { { { -117.0f, 46.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_28, 1.0f, { { { 51.0f, 56.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS_SMALL, 1.0f, { { { 60.0f, 57.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_ASSET_NUMBERS_SMALL, 1.0f, { { { 69.0f, 57.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_PLACE_1, 1.0f, { { { -160.0f, 5.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_PORTRAIT, 1.0f, { { { 260.0f, 16.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, + { { { { 0, 0, 0 } } }, HUD_SPRITE_PLACE_ST, 1.0f, { { { 160.0f, 5.0f, 0.0f } } }, 0, { { 0, 0, 0, 0 } } }, +}; +// clang-format on + +HudPresets2P gHudPresets2P[] = { + { HUD_RACE_POSITION, 53, 16 }, + { HUD_RACE_POSITION_END, 54, 18 }, + { HUD_LAP_COUNT_CURRENT, 203, 19 }, + { HUD_LAP_COUNT_SEPERATOR, 211, 19 }, + { HUD_LAP_COUNT_TOTAL, 220, 19 }, + { HUD_WEAPON_DISPLAY, -120, -31 }, + { HUD_BANANA_COUNT_ICON_STATIC, 33, 22 }, + { HUD_BANANA_COUNT_NUMBER_1, 211, 19 }, + { HUD_BANANA_COUNT_NUMBER_2, 220, 19 }, + { HUD_RACE_TIME_NUMBER, 167, 19 }, + { HUD_RACE_END_FINISH, 0, 10 }, + { HUD_LAP_COUNT_FLAG, 59, 35 }, + { HUD_MAGNET_RETICLE, 59, 35 }, + { HUD_BANANA_COUNT_ICON_SPIN, 33, 22 }, + { HUD_BANANA_COUNT_SPARKLE, 30, 42 }, + { HUD_BANANA_COUNT_X, 202, 19 }, + { HUD_RACE_START_READY, 0, 10 }, + { HUD_RACE_START_GO, 0, 10 }, + { HUD_WRONGWAY_1, 0, 10 }, + { HUD_WRONGWAY_2, 0, 10 }, + { HUD_LAP_TEXT_LAP, 0, 10 }, + { HUD_LAP_TEXT_TWO, 0, 10 }, + { HUD_LAP_TEXT_FINAL, 0, 10 }, + { HUD_CHALLENGE_FINISH_POS_1, -200, 35 }, + { HUD_CHALLENGE_FINISH_POS_2, -175, 37 }, + { HUD_WEAPON_QUANTITY, -106, -45 }, + { HUD_LAP_COUNT_LABEL, 180, 19 }, + { HUD_CHALLENGE_PORTRAIT, 263, 17 }, + { HUD_TREASURE_METRE, 247, 45 }, + { HUD_EGG_CHALLENGE_ICON, 259, 49 }, + { HUD_SILVER_COIN_TALLY, 34, 71 }, + { -1, -1, -1 }, }; -s16 D_800E25C4[96] = { - 0x0000, 0x0035, 0x0010, 0x0001, 0x0036, 0x0012, 0x0004, 0x00CB, 0x0013, 0x0005, 0x00D3, 0x0013, 0x0006, 0x00DC, - 0x0013, 0x0002, 0xFF88, 0xFFE1, 0x001B, 0x0021, 0x0016, 0x0008, 0x00D3, 0x0013, 0x0009, 0x00DC, 0x0013, 0x000B, - 0x00A7, 0x0013, 0x000E, 0x0000, 0x000A, 0x0010, 0x003B, 0x0023, 0x0011, 0x003B, 0x0023, 0x0007, 0x0021, 0x0016, - 0x001C, 0x001E, 0x002A, 0x0012, 0x00CA, 0x0013, 0x000D, 0x0000, 0x000A, 0x000C, 0x0000, 0x000A, 0x0023, 0x0000, - 0x000A, 0x0024, 0x0000, 0x000A, 0x001E, 0x0000, 0x000A, 0x001F, 0x0000, 0x000A, 0x001D, 0x0000, 0x000A, 0x002F, - 0xFF38, 0x0023, 0x0030, 0xFF51, 0x0025, 0x0031, 0xFF96, 0xFFD3, 0x0003, 0x00B4, 0x0013, 0x0032, 0x0107, 0x0011, - 0x0020, 0x00F7, 0x002D, 0x0033, 0x0103, 0x0031, 0x002E, 0x0022, 0x0047, 0xFFFF, 0xFFFF, 0xFFFF, +HudPresets4P gHudPresets4P[] = { + { HUD_RACE_POSITION, 45, 16, 135 }, + { HUD_LAP_COUNT_CURRENT, 94, 19, 78 }, + { HUD_LAP_COUNT_SEPERATOR, 102, 19, 86 }, + { HUD_LAP_COUNT_TOTAL, 111, 19, 95 }, + { HUD_WEAPON_DISPLAY, -47, -36, 36 }, + { HUD_BANANA_COUNT_ICON_STATIC, 0, 22, -29 }, + { HUD_BANANA_COUNT_ICON_SPIN, 0, 22, -29 }, + { HUD_BANANA_COUNT_NUMBER_1, 97, 19, 68 }, + { HUD_BANANA_COUNT_NUMBER_2, 106, 19, 77 }, + { HUD_RACE_TIME_NUMBER, 55, 19, 26 }, + { HUD_RACE_START_GO, 0, 10, 0 }, + { HUD_RACE_START_READY, 0, 10, 0 }, + { HUD_RACE_END_FINISH, -160, 10, -160 }, + { HUD_LAP_COUNT_FLAG, 102, 19, 86 }, + { HUD_MAGNET_RETICLE, 102, 19, 86 }, + { HUD_BANANA_COUNT_X, 88, 19, 59 }, + { HUD_BANANA_COUNT_SPARKLE, -3, 42, -32 }, + { HUD_TREASURE_METRE, 18, 45, 120 }, + { HUD_LAP_TEXT_LAP, -22, 10, -22 }, + { HUD_LAP_TEXT_TWO, 12, 10, 16 }, + { HUD_LAP_TEXT_FINAL, 0, 10, -39 }, + { HUD_WRONGWAY_1, 0, 10, 0 }, + { HUD_WRONGWAY_2, 0, 10, 0 }, + { HUD_CHALLENGE_FINISH_POS_1, -200, 25, -40 }, + { HUD_CHALLENGE_FINISH_POS_2, -175, 27, -15 }, + { HUD_WEAPON_QUANTITY, -33, -50, 50 }, + { HUD_LAP_COUNT_LABEL, 71, 19, 55 }, + { HUD_EGG_CHALLENGE_ICON, 60, 20, 60 }, + { -1, -1, -1, -1 }, }; -s16 D_800E2684[118] = { - 0x0000, 0x002D, 0x0010, 0x0087, 0x0004, 0x005E, 0x0013, 0x004E, 0x0005, 0x0066, 0x0013, 0x0056, 0x0006, 0x006F, - 0x0013, 0x005F, 0x0002, 0xFFD1, 0xFFDC, 0x0024, 0x001B, 0x0000, 0x0016, 0xFFE3, 0x0007, 0x0000, 0x0016, 0xFFE3, - 0x0008, 0x0061, 0x0013, 0x0044, 0x0009, 0x006A, 0x0013, 0x004D, 0x000B, 0x0037, 0x0013, 0x001A, 0x000C, 0x0000, - 0x000A, 0x0000, 0x000D, 0x0000, 0x000A, 0x0000, 0x000E, 0xFF60, 0x000A, 0xFF60, 0x0010, 0x0066, 0x0013, 0x0056, - 0x0011, 0x0066, 0x0013, 0x0056, 0x0012, 0x0058, 0x0013, 0x003B, 0x001C, 0xFFFD, 0x002A, 0xFFE0, 0x0020, 0x0012, - 0x002D, 0x0078, 0x001E, 0xFFEA, 0x000A, 0xFFEA, 0x001F, 0x000C, 0x000A, 0x0010, 0x001D, 0x0000, 0x000A, 0xFFD9, - 0x0023, 0x0000, 0x000A, 0x0000, 0x0024, 0x0000, 0x000A, 0x0000, 0x002F, 0xFF38, 0x0019, 0xFFD8, 0x0030, 0xFF51, - 0x001B, 0xFFF1, 0x0031, 0xFFDF, 0xFFCE, 0x0032, 0x0003, 0x0047, 0x0013, 0x0037, 0x0033, 0x003C, 0x0014, 0x003C, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0000, 0x0000, -}; +// Rare likely just used an s16 array for the above data, but we can make it match with a nicer looking struct. +// Small side effect is this padding is required to maintain matching. +UNUSED s32 gPresetPadding = 0; HudAudio gHudAudioData[2] = { { SOUND_CROWD, 0, 0, NULL, 0, 0, 0, 0, 0 }, @@ -173,8 +223,7 @@ char gHudTimeTrialJp_Defective[] = { 0x80, 0xD5, 0x80, 0xE1, 0x80, 0xB7, 0x80, 0 UNUSED f32 sRecordVel = 0.0f; // Set to whatever the highest velocity recorded is, but never actually used. -// Unused? -s32 D_800E283C[] = { 0x06FFFFFF, 0x000FFFFF, 0x06000000, 0x0014FFFF }; +UNUSED s32 D_800E283C[] = { 0x06FFFFFF, 0x000FFFFF, 0x06000000, 0x0014FFFF }; /*******************************/ @@ -198,7 +247,7 @@ s8 gMinimapXlu; */ s8 gRaceStartShowHudStep; -s8 D_80126CD5; +s8 gHudPALScale; u8 *gAssetHudElementStaleCounter; HudData *gCurrentHud; HudData *gPlayerHud[MAXCONTROLLERS]; // One per active player @@ -227,7 +276,7 @@ u8 gWrongWayNagPrefix; SoundHandle gRaceStartSoundMask; SoundHandle gHUDVoiceSoundMask; SoundHandle gHudBalloonSoundMask; -u16 D_80126D48; +u16 gHudTTSoundID; s32 D_80126D4C; s32 D_80126D50; u8 gMinimapRed; @@ -239,7 +288,7 @@ LevelHeader *gHudLevelHeader; u8 D_80126D64; u8 D_80126D65; u8 D_80126D66; -u8 gStopwatchFaceID; +u8 gStopwatchAnimID; u8 D_80126D68; s8 D_80126D69; s32 gWrongWayNagTimer; @@ -252,7 +301,7 @@ DrawTexture gHudSprites[128]; s32 D_80127180; Settings *gHudSettings; u8 gHudSilverCoinRace; -u8 D_80127189; +u8 gAdventurePlayerFinish; u8 D_8012718A; u8 gMinimapOpacityTarget; s32 gStopwatchErrorX; @@ -307,10 +356,10 @@ void hud_init(UNUSED s32 viewportCount) { hud_init_element(); D_80126D64 = 0; gWrongWayNagTimer = 0; - D_80126D48 = 0; + gHudTTSoundID = SOUND_NONE; D_80126D66 = 4; D_80126D65 = 0; - gStopwatchFaceID = 4; + gStopwatchAnimID = 4; D_80126D69 = 1; D_80126D68 = 1; gHudAudioReset = FALSE; @@ -333,20 +382,24 @@ void hud_init(UNUSED s32 viewportCount) { } } +/** + * Done on race start, set all the hud elements to their default values. + * Numerous override cases for different game modes and multiplayer. + */ void hud_init_element(void) { s32 i; s32 j; s32 activePlayers; HudElement *hudElement; - s16 *temp800E2684; - s16 *temp800E25C4; + HudPresets4P *preset4P; + HudPresets2P *preset2P; s32 k; - s32 var_v0; + s32 temp; - var_v0 = get_current_level_race_type(); - if (var_v0 == RACETYPE_UNK1 || var_v0 == RACETYPE_HUBWORLD) { + temp = get_current_level_race_type(); + if (temp == RACETYPE_UNK1 || temp == RACETYPE_HUBWORLD) { gHudOffsetX = 0; - gHudRaceStart = 1; + gHudRaceStart = TRUE; } else { if (gHUDNumPlayers < 2) { gHudOffsetX = SCREEN_WIDTH; @@ -355,7 +408,7 @@ void hud_init_element(void) { gHudOffsetX = SCREEN_WIDTH - SCREEN_HEIGHT_HALF; gHudBounceMag = 2.0f; } - gHudRaceStart = 0; + gHudRaceStart = FALSE; } gHudBounceTimer = 0; gRaceStartShowHudStep = 0; @@ -369,9 +422,9 @@ void hud_init_element(void) { gMinimapOpacityTarget = osTvType == OS_TV_TYPE_PAL ? 60 : 50; #endif gMinimapFade = 0; - gShowHUD = 0; - D_80126CD5 = 0; - D_80127189 = 0; + gShowHUD = FALSE; + gHudPALScale = FALSE; + gAdventurePlayerFinish = FALSE; D_80126D4C = -100; D_80126D50 = get_random_number_from_range(120, 360); D_8012718A = func_8000E158(); @@ -401,20 +454,20 @@ void hud_init_element(void) { gCurrentHud->entry[k].timer.unk1D = gHudElementBase[k].timer.unk1D; } gCurrentHud->entry[HUD_SILVER_COIN_TALLY].silverCoinTally.offsetY = 5; - if (gHUDNumPlayers == 1) { - for (temp800E25C4 = D_800E25C4; temp800E25C4[0] != -1; temp800E25C4 += 3) { - gCurrentHud->entry[temp800E25C4[0]].pos.x = temp800E25C4[1]; - if ((gAssetHudElementIds[gCurrentHud->entry[temp800E25C4[0]].spriteID] & ASSET_MASK_TEXTURE) == + if (gHUDNumPlayers == TWO_PLAYERS) { + for (preset2P = gHudPresets2P; preset2P->assetID != -1; preset2P++) { + gCurrentHud->entry[preset2P->assetID].pos.x = preset2P->x; + if ((gAssetHudElementIds[gCurrentHud->entry[preset2P->assetID].spriteID] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { - if (j == 0) { - gCurrentHud->entry[temp800E25C4[0]].pos.y = temp800E25C4[2]; - } else { - gCurrentHud->entry[temp800E25C4[0]].pos.y = temp800E25C4[2] + 108; + if (j == PLAYER_ONE) { // Top viewport + gCurrentHud->entry[preset2P->assetID].pos.y = preset2P->y; + } else { // Bottom viewport + gCurrentHud->entry[preset2P->assetID].pos.y = preset2P->y + 108; } - } else if (j == 0) { - gCurrentHud->entry[temp800E25C4[0]].pos.y = temp800E25C4[2] + 60; - } else { - gCurrentHud->entry[temp800E25C4[0]].pos.y = temp800E25C4[2] - 48; + } else if (j == PLAYER_ONE) { // Top viewport + gCurrentHud->entry[preset2P->assetID].pos.y = preset2P->y + 60; + } else { // Bottom viewport + gCurrentHud->entry[preset2P->assetID].pos.y = preset2P->y - 48; } } gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.x = 263.0f; @@ -433,53 +486,56 @@ void hud_init_element(void) { gCurrentHud->entry[HUD_BATTLE_BANANA_COUNT_2].pos.y = 51.0f; gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.y = 17.0f; gCurrentHud->entry[HUD_SILVER_COIN_TALLY].silverCoinTally.offsetY = 3; - } else if ((gHUDNumPlayers == 2) || (gHUDNumPlayers == 3)) { - for (temp800E2684 = D_800E2684; temp800E2684[0] != -1; temp800E2684 += 4) { - if ((gAssetHudElementIds[gCurrentHud->entry[temp800E2684[0]].spriteID] & ASSET_MASK_TEXTURE) == + } else if (gHUDNumPlayers == THREE_PLAYERS || gHUDNumPlayers == FOUR_PLAYERS) { + for (preset4P = gHudPresets4P; preset4P->assetID != -1; preset4P++) { + if ((gAssetHudElementIds[gCurrentHud->entry[preset4P->assetID].spriteID] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { - if ((j == 0) || (j == 2)) { - gCurrentHud->entry[temp800E2684[0]].pos.x = temp800E2684[1]; - } else { - gCurrentHud->entry[temp800E2684[0]].pos.x = temp800E2684[3] + 160; + if (j == PLAYER_ONE || j == PLAYER_THREE) { // Left viewports + gCurrentHud->entry[preset4P->assetID].pos.x = preset4P->xLeft; + } else { // Right viewports + gCurrentHud->entry[preset4P->assetID].pos.x = preset4P->xRight + 160; } - if ((j == 0) || (j == 1)) { - gCurrentHud->entry[temp800E2684[0]].pos.y = temp800E2684[2]; - } else { - gCurrentHud->entry[temp800E2684[0]].pos.y = temp800E2684[2] + 108; + if (j == PLAYER_ONE || j == PLAYER_TWO) { // Top viewports + gCurrentHud->entry[preset4P->assetID].pos.y = preset4P->y; + } else { // Bottom viewports + gCurrentHud->entry[preset4P->assetID].pos.y = preset4P->y + 108; } } else { - if ((j == 0) || (j == 2)) { - gCurrentHud->entry[temp800E2684[0]].pos.x = temp800E2684[1] - 80; - } else { - gCurrentHud->entry[temp800E2684[0]].pos.x = temp800E2684[3] + 80; + if (j == PLAYER_ONE || j == PLAYER_THREE) { // Left viewports + gCurrentHud->entry[preset4P->assetID].pos.x = preset4P->xLeft - 80; + } else { // Right viewports + gCurrentHud->entry[preset4P->assetID].pos.x = preset4P->xRight + 80; } - if ((j == 0) || (j == 1)) { - gCurrentHud->entry[temp800E2684[0]].pos.y = temp800E2684[2] + 60; - } else { - gCurrentHud->entry[temp800E2684[0]].pos.y = temp800E2684[2] - 48; + if (j == PLAYER_ONE || j == PLAYER_TWO) { // Top viewports + gCurrentHud->entry[preset4P->assetID].pos.y = preset4P->y + 60; + } else { // Bottom viewports + gCurrentHud->entry[preset4P->assetID].pos.y = preset4P->y - 48; } } } } - if (gHUDNumPlayers != 0) { + if (gHUDNumPlayers != ONE_PLAYER) { for (i = 0; i < HUD_ELEMENT_COUNT; i++) { - if (gCurrentHud->entry[i].spriteID == 9) { - gCurrentHud->entry[i].spriteID = 0xA; - } else if (gCurrentHud->entry[i].spriteID == 4) { - gCurrentHud->entry[i].spriteID = 0xF; - } else if (gCurrentHud->entry[i].spriteID == 0xB) { - gCurrentHud->entry[i].spriteID = 0xC; - } else if (gCurrentHud->entry[i].spriteID == 0x12) { - gCurrentHud->entry[i].spriteID = 0x1C; - } else if (gCurrentHud->entry[i].spriteID == 0x36) { + if (gCurrentHud->entry[i].spriteID == HUD_ASSET_NUMBERS) { + gCurrentHud->entry[i].spriteID = HUD_ASSET_NUMBERS_SMALL; + } else if (gCurrentHud->entry[i].spriteID == HUD_ASSET_4) { + gCurrentHud->entry[i].spriteID = HUD_ASSET_15; + } else if (gCurrentHud->entry[i].spriteID == HUD_ASSET_SEPERATOR) { + gCurrentHud->entry[i].spriteID = HUD_ASSET_SEPERATOR_SMALL; + } else if (gCurrentHud->entry[i].spriteID == HUD_ASSET_18) { + gCurrentHud->entry[i].spriteID = HUD_ASSET_28; + } else if (gCurrentHud->entry[i].spriteID == HUD_ASSET_54) { gCurrentHud->entry[i].scale *= 0.6; - } else if ((i != 0) && (i != 1) && (i != 2) && (i != 37) && (i != 47) && (i != 48) && (i != 3) && - (i != 50) && (i != 51) && ((i < 52) || (i >= 56) || (i == 28) || (i == 9))) { + } else if (i != HUD_RACE_POSITION && i != HUD_RACE_POSITION_END && i != HUD_WEAPON_DISPLAY && + i != HUD_PRO_AM_LOGO && i != HUD_CHALLENGE_FINISH_POS_1 && i != HUD_CHALLENGE_FINISH_POS_2 && + i != HUD_LAP_COUNT_LABEL && i != HUD_CHALLENGE_PORTRAIT && i != HUD_EGG_CHALLENGE_ICON && + ((i < HUD_BATTLE_BANANA_ICON || i > HUD_BATTLE_BANANA_COUNT_2) || + i == HUD_BANANA_COUNT_SPARKLE || i == HUD_BANANA_COUNT_NUMBER_2)) { gCurrentHud->entry[i].scale *= 0.75; } } } - if (gHUDNumPlayers >= 2) { + if (gHUDNumPlayers >= THREE_PLAYERS) { gCurrentHud->entry[HUD_LAP_TEXT_LAP].scale = 1.0f; gCurrentHud->entry[HUD_LAP_TEXT_TWO].scale = 1.0f; gCurrentHud->entry[HUD_LAP_TEXT_FINAL].scale = 1.0f; @@ -488,20 +544,20 @@ void hud_init_element(void) { gCurrentHud->entry[HUD_WRONGWAY_1].scale = 1.0f; gCurrentHud->entry[HUD_WRONGWAY_2].scale = 1.0f; gCurrentHud->entry[HUD_RACE_END_FINISH].scale = 1.0f; - gCurrentHud->entry[HUD_LAP_TEXT_LAP].spriteID = 0x26; - gCurrentHud->entry[HUD_LAP_TEXT_TWO].spriteID = 0x2B; - gCurrentHud->entry[HUD_LAP_TEXT_FINAL].spriteID = 0x29; - gCurrentHud->entry[HUD_RACE_START_GO].spriteID = 0x25; - gCurrentHud->entry[HUD_RACE_START_READY].spriteID = 0x27; - gCurrentHud->entry[HUD_WRONGWAY_1].spriteID = 0x2D; - gCurrentHud->entry[HUD_WRONGWAY_2].spriteID = 0x2C; - gCurrentHud->entry[HUD_RACE_END_FINISH].spriteID = 0x2A; + gCurrentHud->entry[HUD_LAP_TEXT_LAP].spriteID = HUD_SPRITE_LAP_LAP_SMALL; + gCurrentHud->entry[HUD_LAP_TEXT_TWO].spriteID = HUD_SPRITE_LAP_2_SMALL; + gCurrentHud->entry[HUD_LAP_TEXT_FINAL].spriteID = HUD_SPRITE_LAP_FINAL_SMALL; + gCurrentHud->entry[HUD_RACE_START_GO].spriteID = HUD_SPRITE_GO_SMALL; + gCurrentHud->entry[HUD_RACE_START_READY].spriteID = HUD_SPRITE_GET_READY_SMALL; + gCurrentHud->entry[HUD_WRONGWAY_1].spriteID = HUD_SPRITE_WRONG_SMALL; + gCurrentHud->entry[HUD_WRONGWAY_2].spriteID = HUD_SPRITE_WAY_SMALL; + gCurrentHud->entry[HUD_RACE_END_FINISH].spriteID = HUD_SPRITE_FINISH_SMALL; } else { gCurrentHud->entry[HUD_WEAPON_DISPLAY].weaponDisplay.prevLevel = 1; // while weaponDisplay is not correct union "type" we need the value to be set to be a s8 instead of u8 gCurrentHud->entry[HUD_BANANA_COUNT_ICON_STATIC].weaponDisplay.prevLevel = 1; } - if (is_in_time_trial() != 0) { + if (is_in_time_trial()) { gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].pos.x += -25.0f; gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_1].pos.x += -25.0f; gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_2].pos.x += -25.0f; @@ -532,20 +588,20 @@ void hud_init_element(void) { if (osTvType == OS_TV_TYPE_PAL) { gCurrentHud->entry[HUD_TREASURE_METRE].pos.y -= 4.0f; } - if (gNumActivePlayers >= 3) { - var_v0 = (j == 0) || (j == 2) ? 15 : -10; + if (gNumActivePlayers >= FOUR_PLAYERS) { + temp = (j == PLAYER_ONE) || (j == PLAYER_THREE) ? 15 : -10; } else { - var_v0 = gNumActivePlayers == 1 ? -10 : 0; + temp = gNumActivePlayers == TWO_PLAYERS ? -10 : 0; } - gCurrentHud->entry[HUD_BANANA_COUNT_ICON_STATIC].pos.x += var_v0; - gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].pos.x += var_v0; - gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_1].pos.x += var_v0; - gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_2].pos.x += var_v0; - gCurrentHud->entry[HUD_BANANA_COUNT_SPARKLE].pos.x += var_v0; - gCurrentHud->entry[HUD_BANANA_COUNT_X].pos.x += var_v0; + gCurrentHud->entry[HUD_BANANA_COUNT_ICON_STATIC].pos.x += temp; + gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].pos.x += temp; + gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_1].pos.x += temp; + gCurrentHud->entry[HUD_BANANA_COUNT_NUMBER_2].pos.x += temp; + gCurrentHud->entry[HUD_BANANA_COUNT_SPARKLE].pos.x += temp; + gCurrentHud->entry[HUD_BANANA_COUNT_X].pos.x += temp; break; } - if (is_taj_challenge() != 0) { + if (is_taj_challenge()) { gCurrentHud->entry[HUD_LAP_COUNT_LABEL].pos.x += 28.0f; gCurrentHud->entry[HUD_LAP_COUNT_CURRENT].pos.x += 28.0f; gCurrentHud->entry[HUD_LAP_COUNT_SEPERATOR].pos.x += 28.0f; @@ -567,7 +623,7 @@ void hud_init_element(void) { } } gCurrentHud->entry[HUD_BALLOON_COUNT_ICON].scale = 1.0f; - gCurrentHud->entry[HUD_BALLOON_COUNT_X].spriteID = 0x12; + gCurrentHud->entry[HUD_BALLOON_COUNT_X].spriteID = HUD_ASSET_18; gCurrentHud->entry[HUD_BALLOON_COUNT_NUMBER_1].spriteID = 9; gCurrentHud->entry[HUD_BALLOON_COUNT_NUMBER_2].spriteID = 9; } @@ -1157,7 +1213,7 @@ void hud_eggs_portrait(Object_Racer *racer, UNUSED s32 updateRate) { prevY = gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x; gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; - D_80126CD5 = TRUE; + gHudPALScale = TRUE; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT]); } @@ -1181,7 +1237,7 @@ void hud_eggs_portrait(Object_Racer *racer, UNUSED s32 updateRate) { gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x += 12.0f; } gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x = prevY; - D_80126CD5 = FALSE; + gHudPALScale = FALSE; } /** @@ -1304,9 +1360,9 @@ void func_800A1E48(Object *racerObj, s32 updateRate) { void hud_lives_render(Object_Racer *racer, UNUSED s32 updateRate) { gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { - D_80126CD5 = TRUE; + gHudPALScale = TRUE; hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT]); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; rdp_init(&gHudDL); rendermode_reset(&gHudDL); } @@ -1327,9 +1383,9 @@ void hud_lives_render(Object_Racer *racer, UNUSED s32 updateRate) { if (gNumActivePlayers != 2) { hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_BATTLE_BANANA_X]); sprite_opaque(TRUE); - D_80126CD5 = TRUE; + gHudPALScale = TRUE; hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_BATTLE_BANANA_ICON]); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; sprite_opaque(FALSE); } } @@ -1447,15 +1503,15 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) { return; } - ttSWBodyObject->segment.object.animationID = gStopwatchFaceID; + ttSWBodyObject->segment.object.animationID = gStopwatchAnimID; obj68 = ttSWBodyObject->unk68[0]; obj68->objModel->unk52 = updateRate; - if (gStopwatchFaceID != 0xFF) { - if (gStopwatchFaceID == 4 && (get_race_countdown() || !music_is_playing())) { + if (gStopwatchAnimID != 0xFF) { + if (gStopwatchAnimID == 4 && (get_race_countdown() || !music_is_playing())) { ttSWBodyObject->segment.animFrame = 16; - } else if (gStopwatchFaceID == 4) { + } else if (gStopwatchAnimID == 4) { animcationFraction = music_animation_fraction(); - temp_t6 = (obj68->objModel->animations[gStopwatchFaceID].unk4 - 1) << 4; + temp_t6 = (obj68->objModel->animations[gStopwatchAnimID].unk4 - 1) << 4; if (animcationFraction == -1.0) { ttSWBodyObject->segment.animFrame = 0.0; } else if (animcationFraction > 0.5) { @@ -1476,7 +1532,7 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) { } } else { ttSWBodyObject->segment.animFrame += (updateRate * D_80126D69); - temp_lo = (obj68->objModel->animations[gStopwatchFaceID].unk4 - 1) << 4; + temp_lo = (obj68->objModel->animations[gStopwatchAnimID].unk4 - 1) << 4; if (ttSWBodyObject->segment.animFrame >= temp_lo) { if (D_80126D68 != 0) { D_80126D69 = -D_80126D69; @@ -1557,10 +1613,10 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) { D_80126D4C = -100; if (gHUDVoiceSoundMask == 0) { soundID = get_random_number_from_range(0, D_80126D64 + 2) + SOUND_VOICE_TT_OH_NO; - while (soundID == D_80126D48) { + while (soundID == gHudTTSoundID) { soundID = get_random_number_from_range(0, D_80126D64 + 2) + SOUND_VOICE_TT_OH_NO; } - D_80126D48 = soundID; + gHudTTSoundID = soundID; sound_play(soundID, &gHUDVoiceSoundMask); D_80126D64 = 1; } @@ -1594,10 +1650,10 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) { if ((sqrtf((posX * posX) + (posY * posY) + (posZ * posZ)) < 600.0f) && (gHUDVoiceSoundMask == 0) && (D_80126D50 == 0)) { soundID = SOUND_VOICE_TT_GO_FOR_IT + get_random_number_from_range(0, 2); - while (soundID == D_80126D48) { + while (soundID == gHudTTSoundID) { soundID = SOUND_VOICE_TT_GO_FOR_IT + get_random_number_from_range(0, 2); } - D_80126D48 = soundID; + gHudTTSoundID = soundID; sound_play(soundID, &gHUDVoiceSoundMask); D_80126D50 = get_random_number_from_range(120, 1200); } @@ -1708,7 +1764,7 @@ void hud_main_time_trial(s32 arg0, Object *playerRacerObj, s32 updateRate) { sprite_anim_off(FALSE); } -void hud_stopwatch_face(u8 arg0, u8 arg1, u8 faceID, u8 arg3, u8 arg4) { +void hud_stopwatch_face(u8 arg0, u8 arg1, u8 animID, u8 arg3, u8 arg4) { s32 var_a3; s32 i; UNUSED u8 *temp_v0_2; @@ -1739,7 +1795,7 @@ void hud_stopwatch_face(u8 arg0, u8 arg1, u8 faceID, u8 arg3, u8 arg4) { } D_80126D66 = arg0; D_80126D65 = arg1; - gStopwatchFaceID = faceID; + gStopwatchAnimID = animID; D_80126D69 = arg3; D_80126D68 = arg4; } @@ -1997,22 +2053,22 @@ void hud_treasure(Object_Racer *racer) { prevY = gCurrentHud->entry[HUD_TREASURE_METRE].pos.y; if (gNumActivePlayers < 3 || (gNumActivePlayers == 3 && racer->playerIndex == PLAYER_COMPUTER)) { gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].spriteID = racer->characterId + HUD_SPRITE_PORTRAIT; - D_80126CD5 = TRUE; + gHudPALScale = TRUE; hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT]); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; } for (i = 0; i < 10; i++) { if (i >= racer->lap) { gHudColour = COLOUR_RGBA32(128, 128, 128, 128); } - D_80126CD5 = TRUE; + gHudPALScale = TRUE; hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_TREASURE_METRE]); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; gCurrentHud->entry[HUD_TREASURE_METRE].pos.y -= 3.0f; } gCurrentHud->entry[HUD_TREASURE_METRE].pos.y = prevY; gHudColour = COLOUR_RGBA32(255, 255, 255, 254); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; } /** @@ -2546,7 +2602,7 @@ void hud_race_finish_multiplayer(Object_Racer *racer, s32 updateRate) { s32 temp_v0_4; raceType = get_current_level_race_type(); - if (is_in_two_player_adventure() && is_postrace_viewport_active() && D_80127189 == 0) { + if (is_in_two_player_adventure() && is_postrace_viewport_active() && gAdventurePlayerFinish == FALSE) { if (func_8000E184()) { gCurrentHud->entry[HUD_CHALLENGE_FINISH_POS_1].pos.y -= 108.0f; gCurrentHud->entry[HUD_CHALLENGE_FINISH_POS_2].pos.y -= 108.0f; @@ -2558,7 +2614,7 @@ void hud_race_finish_multiplayer(Object_Racer *racer, s32 updateRate) { gCurrentHud->entry[HUD_RACE_TIME_NUMBER].pos.y += 35.0f; gCurrentHud->entry[HUD_LAP_TIME_TEXT].pos.y += 35.0f; gHudAudioData[0].playerIndex = racer->playerIndex; - D_80127189 = 1; + gAdventurePlayerFinish = TRUE; } switch (gCurrentHud->entry[HUD_CHALLENGE_FINISH_POS_1].raceFinishPos.status) { @@ -3434,9 +3490,9 @@ void hud_render_general(Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 updateRate gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT].pos.x -= 4.0f; gCurrentHud->entry[HUD_EGG_CHALLENGE_ICON].pos.x -= 4.0f; } - D_80126CD5 = TRUE; + gHudPALScale = TRUE; hud_element_render(&gHudDL, &gHudMtx, &gHudVtx, &gCurrentHud->entry[HUD_CHALLENGE_PORTRAIT]); - D_80126CD5 = FALSE; + gHudPALScale = FALSE; if (gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].bananaCountIconSpin.visualCounter == 0 && curRacerObj->bananas == 10) { gCurrentHud->entry[HUD_BANANA_COUNT_ICON_SPIN].bananaCountIconSpin.visualCounter = @@ -3748,19 +3804,25 @@ void minimap_marker_pos(f32 x, f32 z, f32 angleSin, f32 angleCos, f32 modelAspec ((scaledX * angleSin) - (scaledY * angleCos)) + gMinimapDotOffsetY; } +/** + * Renders a HUD element onscreen. + * Loads the asset if it does not yet exist, and refreshes the stale counter to keep it loaded. + * Since hud elements can be all sorts of things, the function checks what asset type it is, before + * deciding to draw a texture rectangle, ortho tris, or a 3D model entirely. + */ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement *hud) { TextureHeader **textureHeader3; TextureHeader *textureHeader2; TextureHeader *textureHeader; ObjectSegment *objSegment; - LevelObjectEntry_Hud sp9C; + LevelObjectEntry_Hud objEntry; UNUSED s32 pad1; Object *tempObject; HudDrawTexture sp88; UNUSED s32 pad2[3]; HudDrawTexture sp70; - s32 var_v1; - u32 var_v0; + s32 alpha; + u32 colour; s32 spriteID; HudDrawTexture sp58; UNUSED s32 pad3; @@ -3772,9 +3834,9 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement spriteID = hud->spriteID; spriteElementId = gAssetHudElementIds[spriteID]; if ((spriteElementId & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { - sp9C.unk8 = -gMinimapOpacity; + objEntry.offsetY = -gMinimapOpacity; } else { - sp9C.unk8 = gMinimapOpacity; + objEntry.offsetY = gMinimapOpacity; } if (gAssetHudElements->entry[spriteID] == NULL) { @@ -3783,12 +3845,12 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement } else if (spriteElementId & ASSET_MASK_SPRITE) { gAssetHudElements->entry[hud->spriteID] = func_8007C12C(spriteElementId & 0x3FFF, 1); } else if (spriteElementId & ASSET_MASK_OBJECT) { - sp9C.common.objectID = spriteElementId & 0xFF; - sp9C.common.size = ((gAssetHudElementIds[hud->spriteID] & 0x100) >> 1) | 8; - sp9C.common.x = 0; - sp9C.common.y = 0; - sp9C.common.z = 0; - gAssetHudElements->entry[hud->spriteID] = spawn_object((LevelObjectEntryCommon *) &sp9C, 0); + objEntry.common.objectID = spriteElementId & 0xFF; + objEntry.common.size = ((gAssetHudElementIds[hud->spriteID] & 0x100) >> 1) | sizeof(LevelObjectEntryCommon); + objEntry.common.x = 0; + objEntry.common.y = 0; + objEntry.common.z = 0; + gAssetHudElements->entry[hud->spriteID] = spawn_object((LevelObjectEntryCommon *) &objEntry, 0); } else { gAssetHudElements->entry[hud->spriteID] = object_model_init(spriteElementId, 0); } @@ -3805,24 +3867,25 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement gHudMtx = *mtx; gHudVtx = *vtxList; spriteID = hud->spriteID; - if (spriteID != 0x28) { - if ((spriteID != 0xE) && (spriteID != 0x1B) && ((spriteID < 0x2F) || (spriteID >= 0x36)) && - (spriteID != 0x2E) && (gMinimapXlu & 1)) { - hud->pos.y += sp9C.unk8; + if (spriteID != HUD_SPEEDOMETRE_30) { + if (spriteID != HUD_RACE_END_FINISH && spriteID != HUD_BANANA_COUNT_ICON_STATIC && + (spriteID < HUD_CHALLENGE_FINISH_POS_1 || spriteID >= HUD_BATTLE_BANANA_COUNT_1) && + spriteID != HUD_SILVER_COIN_TALLY && gMinimapXlu & 1) { + hud->pos.y += objEntry.offsetY; } hud->pos.x += gHudOffsetX + gHudBounceX; } spriteID = hud->spriteID; if ((gAssetHudElementIds[spriteID] & ASSET_MASK_TEXTURE) == ASSET_MASK_TEXTURE) { - if ((spriteID >= 0x2F) && (spriteID < 0x36)) { + if (spriteID >= HUD_CHALLENGE_FINISH_POS_1 && spriteID < HUD_BATTLE_BANANA_COUNT_1) { if (osTvType == OS_TV_TYPE_PAL) { hud->pos.y -= 8.0f; } if (gMinimapXlu & 2) { - var_v1 = (255.0f - ((gMinimapOpacity * 255.0f) / gMinimapOpacityTarget)); + alpha = 255.0f - ((gMinimapOpacity * 255.0f) / gMinimapOpacityTarget); } else { - var_v1 = 0xFF; + alpha = 255; } spriteID = hud->spriteID; textureHeader = gAssetHudElements->entry[spriteID]; @@ -3832,26 +3895,26 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement sp88.drawTexture.yOffset = hud->pos.y; sp88.unk8 = 0; if (osTvType == OS_TV_TYPE_PAL) { - if (hud->spriteID == 0x35) { - if (var_v1 == 0xFF) { - var_v0 = -2; + if (hud->spriteID == HUD_BATTLE_BANANA_X) { + if (alpha == 255) { + colour = COLOUR_RGBA32(255, 255, 255, 254); } else { - var_v0 = var_v1 | ~0xFF; + colour = COLOUR_RGBA32(255, 255, 255, alpha); } sp88.drawTexture.xOffset = 0; sp88.drawTexture.yOffset = 0; - texrect_draw_scaled(&gHudDL, &sp88.drawTexture, hud->pos.x, hud->pos.y, 1.0f, 1.1f, var_v0, + texrect_draw_scaled(&gHudDL, &sp88.drawTexture, hud->pos.x, hud->pos.y, 1.0f, 1.1f, colour, TEXRECT_POINT); } else { - texrect_draw(&gHudDL, &sp88.drawTexture, 0, 0, 0xFF, 0xFF, 0xFF, var_v1); + texrect_draw(&gHudDL, &sp88.drawTexture, 0, 0, 0xFF, 0xFF, 0xFF, alpha); } } else { - texrect_draw(&gHudDL, &sp88.drawTexture, 0, 0, 0xFF, 0xFF, 0xFF, var_v1); + texrect_draw(&gHudDL, &sp88.drawTexture, 0, 0, 0xFF, 0xFF, 0xFF, alpha); } if (osTvType == OS_TV_TYPE_PAL) { hud->pos.y += 8.0f; } - } else if ((D_80126CD5 != 0) && (osTvType == OS_TV_TYPE_PAL)) { + } else if (gHudPALScale && osTvType == OS_TV_TYPE_PAL) { textureHeader = gAssetHudElements->entry[spriteID]; textureHeader = (TextureHeader *) (((u8 *) textureHeader) + hud->spriteOffset * textureHeader->textureSize); sp70.drawTexture.texture = textureHeader; @@ -3864,7 +3927,7 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement textureHeader2 = gAssetHudElements->entry[spriteID]; textureHeader2 = (TextureHeader *) (((u8 *) textureHeader2) + hud->spriteOffset * textureHeader2->textureSize); - if (gHudColour == -2) { + if (gHudColour == COLOUR_RGBA32(255, 255, 255, 254)) { gHudSprites[D_80127180].texture = textureHeader2; gHudSprites[D_80127180].xOffset = hud->pos.x; gHudSprites[D_80127180].yOffset = hud->pos.y; @@ -3874,7 +3937,7 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement sp58.drawTexture.xOffset = hud->pos.x; sp58.drawTexture.yOffset = hud->pos.y; sp58.unk8 = 0; - texrect_draw(&gHudDL, &sp58.drawTexture, 0, 0, (gHudColour >> 0x18) & 0xFF, (gHudColour >> 0x10) & 0xFF, + texrect_draw(&gHudDL, &sp58.drawTexture, 0, 0, (gHudColour >> 24) & 0xFF, (gHudColour >> 16) & 0xFF, (gHudColour >> 8) & 0xFF, gHudColour & 0xFF); rendermode_reset(&gHudDL); } @@ -3918,7 +3981,7 @@ void hud_element_render(Gfx **dList, MatrixS **mtx, Vertex **vtxList, HudElement if (spriteID != 0x28) { if ((spriteID != 0xE) && (spriteID != 0x1B) && ((spriteID < 0x2F) || (spriteID >= 0x36)) && (spriteID != 0x2E) && (gMinimapXlu & 1)) { - hud->pos.y -= sp9C.unk8; + hud->pos.y -= objEntry.offsetY; } hud->pos.x -= gHudOffsetX + gHudBounceX; } diff --git a/src/game_ui.h b/src/game_ui.h index e90a3db9..1a3c5a4b 100644 --- a/src/game_ui.h +++ b/src/game_ui.h @@ -15,6 +15,19 @@ #define HUD_EGG_TOTAL 3 +typedef struct HudPresets2P { + s16 assetID; + s16 x; + s16 y; +} HudPresets2P; + +typedef struct HudPresets4P { + s16 assetID; + s16 xLeft; + s16 y; + s16 xRight; +} HudPresets4P; + typedef enum RaceFinishStages { HUD_RACEFINISH_MUTE, HUD_RACEFINISH_TEXT_IN, @@ -54,8 +67,6 @@ typedef enum WrongWayDirection { WRONGWAY_IN = 1 } WrongWayDirection; - - enum CourseIndicatorArrows { INDICATOR_NONE, INDICATOR_LEFT, diff --git a/src/lights.c b/src/lights.c index beea83de..f74b869a 100644 --- a/src/lights.c +++ b/src/lights.c @@ -54,11 +54,11 @@ void setup_lights(s32 count) { free_lights(); gMaxLights = count; - buffer = (ObjectLight **) mempool_alloc_safe( + buffer = (u8 *) mempool_alloc_safe( gMaxLights * (sizeof(s32 *) + sizeof(ObjectLight) + sizeof(unk800DC960) + sizeof(Vec3f)), COLOUR_TAG_MAGENTA); temp = gMaxLights; - gActiveLights = buffer; + gActiveLights = (ObjectLight **) buffer; buffer += temp * sizeof(ObjectLight *); D_800DC954 = (ObjectLight *) buffer; D_800DC960 = (unk800DC960 *) ((u32) D_800DC954 + temp * sizeof(ObjectLight)); diff --git a/src/stacks.h b/src/stacks.h index 855823ee..7d79593c 100644 --- a/src/stacks.h +++ b/src/stacks.h @@ -3,6 +3,7 @@ #include "types.h" +#define STACK_EPC 0x1000 #define STACK_IDLE 0x100 #define STACK_SCHED 0x2000 #define STACK_AUD 0x3010 diff --git a/src/thread0_epc.c b/src/thread0_epc.c index edb1edf4..f2ada301 100644 --- a/src/thread0_epc.c +++ b/src/thread0_epc.c @@ -12,13 +12,6 @@ #include "PR/os_internal_thread.h" #include "PRinternal/rmonint.h" -/************ .rodata ************/ - -UNUSED const char D_800E8E70[] = "\nAssertion failed: '%s' in file %s, line %d\n"; -UNUSED const char D_800E8EA0[] = "\nAssertion failed: '%s' in file %s, line %d\n"; - -/*********************************/ - /************ .data ************/ s32 sLockupStatus = -1; @@ -27,12 +20,12 @@ s32 sLockupDelay = 0; /*******************************/ -u64 gEPCStack[0x200]; +u64 gEPCStack[STACKSIZE(STACK_EPC)]; OSThread gEPCThread; -OSMesgQueue D_80129790; -OSMesg D_801297A8[8]; -OSMesg D_801297C8[8]; -OSMesgQueue D_801297E8; +OSMesgQueue gEPCMesgQueue; +OSMesg gEPCMesgBuf[8]; +OSMesg gEPCPIBuf[8]; +OSMesgQueue gEPCPIQueue; /** * Start the exception program counter thread. @@ -41,7 +34,7 @@ OSMesgQueue D_801297E8; void thread0_create(void) { s32 i; - osCreateThread(&gEPCThread, 0, thread0_Main, 0, &gEPCStack[0x200], OS_PRIORITY_MAX); + osCreateThread(&gEPCThread, 0, thread0_Main, 0, &gEPCStack[STACKSIZE(STACK_EPC)], OS_PRIORITY_MAX); osStartThread(&gEPCThread); for (i = 0; i < 3; i++) { gObjectStackTrace[i] = -1; @@ -56,13 +49,13 @@ void thread0_Main(UNUSED void *unused) { s32 sp34; s32 s0 = 0; - osCreateMesgQueue(&D_80129790, D_801297A8, ARRAY_COUNT(D_801297A8)); - osSetEventMesg(OS_EVENT_FAULT, &D_80129790, (OSMesg) RMON_MESG_FAULT); - osSetEventMesg(OS_EVENT_CPU_BREAK, &D_80129790, (OSMesg) RMON_MESG_CPU_BREAK); - osCreatePiManager(150, &D_801297E8, D_801297C8, ARRAY_COUNT(D_801297C8)); + osCreateMesgQueue(&gEPCMesgQueue, gEPCMesgBuf, ARRAY_COUNT(gEPCMesgBuf)); + osSetEventMesg(OS_EVENT_FAULT, &gEPCMesgQueue, (OSMesg) RMON_MESG_FAULT); + osSetEventMesg(OS_EVENT_CPU_BREAK, &gEPCMesgQueue, (OSMesg) RMON_MESG_CPU_BREAK); + osCreatePiManager(150, &gEPCPIQueue, gEPCPIBuf, ARRAY_COUNT(gEPCPIBuf)); while (1) { - osRecvMesg(&D_80129790, (OSMesg) &sp34, OS_MESG_BLOCK); + osRecvMesg(&gEPCMesgQueue, (OSMesg) &sp34, OS_MESG_BLOCK); #if VERSION < VERSION_80 if (!(get_filtered_cheats() & CHEAT_EPC_LOCK_UP_DISPLAY)) { continue; @@ -192,7 +185,7 @@ void dump_memory_to_cpak(s32 epc, s32 size, u32 colourTag) { } } i = sizeof(sp40) + sizeof(sp240) + sizeof(sp440); // fakematch? - write_controller_pak_file(0, -1, "CORE", "", sp40, i); + write_controller_pak_file(0, -1, "CORE", "", sp40, sizeof(sp40) + sizeof(sp240) + sizeof(sp440)); while (1) {} // Infinite loop; waiting for the player to reset the console? } } diff --git a/src/tracks.c b/src/tracks.c index 6bee3b9e..1aa95474 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -137,13 +137,13 @@ s32 *gLevelModelTable; UNUSED f32 gPrevCameraX; // Set but never read UNUSED f32 gPrevCameraY; // Set but never read UNUSED f32 gPrevCameraZ; // Set but never read -Triangle *gShadowHeapTris[2 * 2]; // Triangle Data for shadows +Triangle *gShadowHeapTris[2 + 2]; // Triangle Data for shadows Triangle *gCurrShadowTris; UNUSED s32 D_8011D334; -Vertex *gShadowHeapVerts[2 * 2]; // Vertex Data for shadows +Vertex *gShadowHeapVerts[2 + 2]; // Vertex Data for shadows Vertex *gCurrShadowVerts; UNUSED s32 D_8011D34C; -ShadowHeapProperties *gShadowHeapData[2 * 2]; // General data for shadows. Texture and geometry size. +ShadowHeapProperties *gShadowHeapData[2 + 2]; // General data for shadows. Texture and geometry size. ShadowHeapProperties *gCurrShadowHeapData; s32 gShadowTail; // Position in the heap the shadow data ends at. s32 gNewShadowTriCount; // xOffset? diff --git a/src/waves.c b/src/waves.c index ad45b429..0fadb1b0 100644 --- a/src/waves.c +++ b/src/waves.c @@ -16,13 +16,13 @@ Vec2s *D_800E3044 = NULL; // holds some sort of index? TexCoords *D_800E3048 = NULL; f32 *D_800E304C[9] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -Vertex *gWaveVertices[4][1] = { NULL, NULL }; -Triangle *gWaveTriangles[4][1] = { NULL, NULL, NULL, NULL }; +Vertex *gWaveVertices[4][1] = { { NULL }, { NULL } }; +Triangle *gWaveTriangles[4][1] = { { NULL }, { NULL }, { NULL }, { NULL } }; Triangle D_800E3090[4] = { - { { BACKFACE_DRAW, 0, 2, 1 }, 0, 0, 0, 0, 0, 0 }, - { { BACKFACE_DRAW, 1, 2, 3 }, 0, 0, 0, 0, 0, 0 }, - { { BACKFACE_DRAW, 0, 2, 1 }, 0, 0, 0, 0, 0, 0 }, - { { BACKFACE_DRAW, 1, 2, 3 }, 0, 0, 0, 0, 0, 0 }, + { { { BACKFACE_DRAW, 0, 2, 1 } }, { { { 0, 0 } } }, { { { 0, 0 } } }, { { { 0, 0 } } } }, + { { { BACKFACE_DRAW, 1, 2, 3 } }, { { { 0, 0 } } }, { { { 0, 0 } } }, { { { 0, 0 } } } }, + { { { BACKFACE_DRAW, 0, 2, 1 } }, { { { 0, 0 } } }, { { { 0, 0 } } }, { { { 0, 0 } } } }, + { { { BACKFACE_DRAW, 1, 2, 3 } }, { { { 0, 0 } } }, { { { 0, 0 } } }, { { { 0, 0 } } } }, }; TextureHeader *gWaveTextureHeader = NULL; @@ -67,12 +67,12 @@ const char D_800E9260[] = "\nError :: can not add another wave swell, reached li Gfx *gWaveDL; MatrixS *D_80129FC4; unk80129FC8 D_80129FC8; // holds lots of control information used in this file -s32 D_8012A018; // either 1 or 0, toggled in func_800B9C18, used to index vertices and triangles +s32 gWaveVertexFlip; // either 1 or 0, toggled in func_800B9C18, used to index vertices and triangles f32 D_8012A01C; // is set to lowest value of D_800E3040 f32 D_8012A020; // is set to highest value of D_800E3040 UNUSED s32 D_8012A024; Vertex D_8012A028[2][4]; // stores values of gWaveVertices to be used in func_800BA8E4 -s32 D_8012A078; // controls whether 2 or 4 items are used in gWaveVertices / gWaveTriangles +s32 gWavePlayerCount; // controls whether 2 or 4 items are used in gWaveVertices / gWaveTriangles TriangleBatchInfo *gWaveBatch; TextureHeader *gWaveTexture; s32 D_8012A084; // u value for D_800E3048 @@ -158,7 +158,7 @@ void wave_init(void) { } temp = (D_80129FC8.unk0 + 1); allocSize = (temp * 250 * (D_80129FC8.unk0 + 1)); - if (D_8012A078 != 2) { + if (gWavePlayerCount != 2) { gWaveVertices[0][0] = (Vertex *) mempool_alloc_safe(allocSize << 1, COLOUR_TAG_CYAN); gWaveVertices[1][0] = (Vertex *) (((u32) gWaveVertices[0][0]) + allocSize); } else { @@ -168,7 +168,7 @@ void wave_init(void) { gWaveVertices[3][0] = (Vertex *) (((u32) gWaveVertices[2][0]) + allocSize); } allocSize = (D_80129FC8.unk0 * 32) * D_80129FC8.unk0; - if (D_8012A078 != 2) { + if (gWavePlayerCount != 2) { gWaveTriangles[0][0] = mempool_alloc_safe(allocSize << 1, COLOUR_TAG_CYAN); gWaveTriangles[1][0] = (Triangle *) (((u32) gWaveTriangles[0][0]) + allocSize); } else { @@ -181,7 +181,7 @@ void wave_init(void) { } void func_800B8134(LevelHeader *header) { - if (D_8012A078 != 2) { + if (gWavePlayerCount != 2) { D_80129FC8.unk0 = header->unk56; } else { D_80129FC8.unk0 = 4; @@ -194,7 +194,7 @@ void func_800B8134(LevelHeader *header) { D_80129FC8.unk18 = header->unk5E / 256.0f; D_80129FC8.unk1C = header->unk5D << 8; D_80129FC8.unk20 = header->unk60 & ~1; - if (D_8012A078 != 2) { + if (gWavePlayerCount != 2) { D_80129FC8.unk24 = header->unk6E; } else { D_80129FC8.unk24 = 3; @@ -211,7 +211,7 @@ void func_800B8134(LevelHeader *header) { D_80129FC8.darkVertexColours = header->darkVertexColours; } -void func_800B82B4(LevelModel *model, LevelHeader *header, s32 arg2) { +void func_800B82B4(LevelModel *model, LevelHeader *header, s32 playerCount) { s32 k; s32 var_fp; s32 j_2; @@ -229,7 +229,7 @@ void func_800B82B4(LevelModel *model, LevelHeader *header, s32 arg2) { s32 var_a1; s32 var_t2; - D_8012A078 = arg2; + gWavePlayerCount = playerCount; func_800B8134(header); wave_init(); func_800BBDDC(model, header); @@ -278,16 +278,16 @@ void func_800B82B4(LevelModel *model, LevelHeader *header, s32 arg2) { var_s5 = 0; i_2 = 0; load_rng_seed(); - if (arg2 != 2) { - arg2 = 2; + if (playerCount != 2) { + playerCount = 2; } else { - arg2 = 4; + playerCount = 4; } for (var_s3 = 0; var_s3 < 25; var_s3++) { if (0 <= D_80129FC8.unk0) { do { for (j_2 = 0; D_80129FC8.unk0 >= j_2; j_2++) { - for (k = 0; k < arg2; k++) { + for (k = 0; k < playerCount; k++) { gWaveVertices[0][k][var_s5].x = (j_2 * D_8012A0B8) + 0.5; gWaveVertices[0][k][var_s5].z = (i_2 * D_8012A0BC) + 0.5; // this is only 0 for hot top volcano @@ -313,7 +313,7 @@ void func_800B82B4(LevelModel *model, LevelHeader *header, s32 arg2) { var_s5 = 0; for (i_2 = 0; i_2 < D_80129FC8.unk0; i_2++) { for (j_2 = 0; j_2 < D_80129FC8.unk0; j_2++) { - for (k = 0; k < arg2; k++) { + for (k = 0; k < playerCount; k++) { gWaveTriangles[0][k][var_s5].flags = BACKFACE_DRAW; gWaveTriangles[0][k][var_s5].vi0 = j_2; gWaveTriangles[0][k][var_s5].vi1 = (j_2 + D_80129FC8.unk0) + 1; @@ -377,7 +377,7 @@ void func_800B82B4(LevelModel *model, LevelHeader *header, s32 arg2) { D_800E3188 = 0; gWavePowerDivisor = 0; gWaveGeneratorObj = NULL; - D_8012A018 = 0; + gWaveVertexFlip = 0; } void func_800B8B8C(void) { @@ -580,7 +580,7 @@ void func_800B92F4(s32 arg0, s32 arg1) { } sp84 = D_8012A5E8[k].unk6; - vertices = &gWaveVertices[D_8012A018 + arg1][0][sp90 * sp98]; + vertices = &gWaveVertices[gWaveVertexFlip + arg1][0][sp90 * sp98]; sp98 = D_800E30E4[sp98]; vertexIdx = 0; for (i = 0; i <= D_80129FC8.unk0; i++) { @@ -679,7 +679,7 @@ void func_800B97A8(s32 arg0, s32 arg1) { } var_a0 = D_8012A5E8[k].unk6; - vertices = &gWaveVertices[D_8012A018 + arg1][0][spA0 * spA8]; + vertices = &gWaveVertices[gWaveVertexFlip + arg1][0][spA0 * spA8]; spA8 = D_800E30E4[spA8]; for (i = 0, vertexIdx = 0; i <= D_80129FC8.unk0; i++) { var_s1 = D_8012A5E8[k].unk4; @@ -737,7 +737,7 @@ void func_800B9C18(s32 arg0) { s32 j_2; s32 i_2; - D_8012A018 = 1 - D_8012A018; + gWaveVertexFlip = 1 - gWaveVertexFlip; for (i_2 = 0, j_2 = 0; i_2 < D_80129FC8.unk4; i_2++) { for (k_2 = 0; k_2 < D_80129FC8.unk4; k_2++) { D_800E3044[j_2].s[0] += arg0; @@ -775,7 +775,7 @@ void func_800B9C18(s32 arg0) { var_a2 += D_8012A090; } - if (D_8012A078 != 2) { + if (gWavePlayerCount != 2) { var_t2 = 1; } else { var_t2 = 2; @@ -787,18 +787,18 @@ void func_800B9C18(s32 arg0) { for (i = 0; i < D_80129FC8.unk0; i++) { for (j = 0; j < D_80129FC8.unk0; j++) { for (k = 0; k < var_t2; k++) { - gWaveTriangles[D_8012A018][k << 1][var_s0].uv0.u = D_800E3048[var_t5].u; - gWaveTriangles[D_8012A018][k << 1][var_s0].uv0.v = D_800E3048[var_t5 + 1].v; - gWaveTriangles[D_8012A018][k << 1][var_s0].uv1.u = D_800E3048[var_ra].u; - gWaveTriangles[D_8012A018][k << 1][var_s0].uv1.v = D_800E3048[var_ra].v; - gWaveTriangles[D_8012A018][k << 1][var_s0].uv2.u = D_800E3048[var_t5 + 1].u; - gWaveTriangles[D_8012A018][k << 1][var_s0].uv2.v = D_800E3048[var_t5 + 1].v; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv0.u = D_800E3048[var_t5 + 1].u; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv0.v = D_800E3048[var_t5 + 1].v; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv1.u = D_800E3048[var_ra].u; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv1.v = D_800E3048[var_ra + 1].v; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv2.u = D_800E3048[var_ra + 1].u; - gWaveTriangles[D_8012A018][k << 1][var_s0 + 1].uv2.v = D_800E3048[var_ra + 1].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv0.u = D_800E3048[var_t5].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv0.v = D_800E3048[var_t5 + 1].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv1.u = D_800E3048[var_ra].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv1.v = D_800E3048[var_ra].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv2.u = D_800E3048[var_t5 + 1].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0].uv2.v = D_800E3048[var_t5 + 1].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv0.u = D_800E3048[var_t5 + 1].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv0.v = D_800E3048[var_t5 + 1].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv1.u = D_800E3048[var_ra].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv1.v = D_800E3048[var_ra + 1].v; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv2.u = D_800E3048[var_ra + 1].u; + gWaveTriangles[gWaveVertexFlip][k << 1][var_s0 + 1].uv2.v = D_800E3048[var_ra + 1].v; } var_t5++; var_ra++; @@ -808,18 +808,18 @@ void func_800B9C18(s32 arg0) { var_ra++; } - D_800E3090[2 * D_8012A018].uv0.u = D_800E3048[0].u; - D_800E3090[2 * D_8012A018].uv0.v = D_800E3048[0].v; - D_800E3090[2 * D_8012A018].uv1.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].u; - D_800E3090[2 * D_8012A018].uv1.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].v; - D_800E3090[2 * D_8012A018].uv2.u = D_800E3048[D_80129FC8.unk0].u; - D_800E3090[2 * D_8012A018].uv2.v = D_800E3048[D_80129FC8.unk0].v; - D_800E3090[2 * D_8012A018 + 1].uv0.u = D_800E3048[D_80129FC8.unk0].u; - D_800E3090[2 * D_8012A018 + 1].uv0.v = D_800E3048[D_80129FC8.unk0].v; - D_800E3090[2 * D_8012A018 + 1].uv1.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].u; - D_800E3090[2 * D_8012A018 + 1].uv1.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].v; - D_800E3090[2 * D_8012A018 + 1].uv2.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1) + D_80129FC8.unk0].u; - D_800E3090[2 * D_8012A018 + 1].uv2.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1) + D_80129FC8.unk0].v; + D_800E3090[2 * gWaveVertexFlip].uv0.u = D_800E3048[0].u; + D_800E3090[2 * gWaveVertexFlip].uv0.v = D_800E3048[0].v; + D_800E3090[2 * gWaveVertexFlip].uv1.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].u; + D_800E3090[2 * gWaveVertexFlip].uv1.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].v; + D_800E3090[2 * gWaveVertexFlip].uv2.u = D_800E3048[D_80129FC8.unk0].u; + D_800E3090[2 * gWaveVertexFlip].uv2.v = D_800E3048[D_80129FC8.unk0].v; + D_800E3090[2 * gWaveVertexFlip + 1].uv0.u = D_800E3048[D_80129FC8.unk0].u; + D_800E3090[2 * gWaveVertexFlip + 1].uv0.v = D_800E3048[D_80129FC8.unk0].v; + D_800E3090[2 * gWaveVertexFlip + 1].uv1.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].u; + D_800E3090[2 * gWaveVertexFlip + 1].uv1.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1)].v; + D_800E3090[2 * gWaveVertexFlip + 1].uv2.u = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1) + D_80129FC8.unk0].u; + D_800E3090[2 * gWaveVertexFlip + 1].uv2.v = D_800E3048[D_80129FC8.unk0 * (D_80129FC8.unk0 + 1) + D_80129FC8.unk0].v; if (D_800E3188 > 0) { func_800BFE98(arg0); @@ -880,7 +880,11 @@ void func_800BA288(s32 arg0, s32 arg1) { } } -void func_800BA4B8(TextureHeader *tex, s32 rtile) { +/** + * Loads a texture into texture memory. + * Can offset the texture address in bytes, since waves use multi-texturing. + */ +void wave_load_material(TextureHeader *tex, s32 rtile) { s32 txmask; s32 tmem; u32 texWidth; @@ -907,7 +911,7 @@ void func_800BA4B8(TextureHeader *tex, s32 rtile) { } // difference is G_IM_SIZ_32b vs G_IM_SIZ_16b - if ((tex->format & 0xF) == TEX_FORMAT_RGBA32) { + if (TEX_FORMAT(tex->format) == TEX_FORMAT_RGBA32) { gDPLoadMultiBlock(gWaveDL++, OS_PHYSICAL_TO_K0(tex + 1), tmem, rtile, G_IM_FMT_RGBA, G_IM_SIZ_32b, texWidth, texWidth, 0, 0, 0, txmask, txmask, 0, 0); } else { @@ -916,7 +920,7 @@ void func_800BA4B8(TextureHeader *tex, s32 rtile) { } } -void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { +void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 viewportID) { s32 sp11C; Vertex *vtx; Triangle *tri; @@ -932,10 +936,10 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { TextureHeader *tex1; TextureHeader *tex2; - if ((arg2 != 1) || (D_8012A078 != 2)) { - arg2 = 0; + if (viewportID != 1 || gWavePlayerCount != 2) { + viewportID = 0; } else { - arg2 = 2; + viewportID = 2; } if (D_800E30DC > 0) { @@ -948,10 +952,10 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { gSPClearGeometryMode(gWaveDL++, G_FOG); tex1 = set_animated_texture_header(gWaveTextureHeader, D_8012A09C << 8); tex2 = set_animated_texture_header(gWaveTexture, gWaveBatch->unk7 << 14); - func_800BA4B8(tex1, 1); - func_800BA4B8(tex2, 0); + wave_load_material(tex1, 1); + wave_load_material(tex2, 0); gDPSetCombineMode(gWaveDL++, DKR_CC_UNK14, DKR_CC_UNK15); - if ((tex1->format & 0xF) == TEX_FORMAT_RGBA32 && get_viewport_count() <= 0) { + if (TEX_FORMAT(tex1->format) == TEX_FORMAT_RGBA32 && get_viewport_count() <= VIEWPORTS_COUNT_1_PLAYER) { gDPSetOtherMode(gWaveDL++, DKR_OMH_2CYC_BILERP, DKR_OML_COMMON | G_RM_AA_ZB_XLU_INTER2); } else { gDPSetOtherMode(gWaveDL++, DKR_OMH_2CYC_BILERP, DKR_OML_COMMON | G_RM_AA_ZB_OPA_SURF2); @@ -984,9 +988,9 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { spE4.rotation.x = spE4.rotation.y = spE4.rotation.z = 0; for (; i < D_800E30DC; i++) { if (D_80129FC8.darkVertexColours) { - func_800B92F4(D_8012A1E8[i], arg2); + func_800B92F4(D_8012A1E8[i], viewportID); } else { - func_800B97A8(D_8012A1E8[i], arg2); + func_800B97A8(D_8012A1E8[i], viewportID); } spE0 = &D_800E30D8[D_8012A1E8[i]]; spE4.x_position = spE0->unk4; @@ -1003,8 +1007,8 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { numVerts = D_80129FC8.unk0 + 1; var_t0 = ((sp104 & 0xFF) - 1) * numVerts * numVerts; for (j = 0; j < D_80129FC8.unk0; j++) { - vtx = &gWaveVertices[D_8012A018 + arg2][0][var_t0]; - tri = &gWaveTriangles[D_8012A018 + arg2][0][j * (D_80129FC8.unk0 << 1)]; + vtx = &gWaveVertices[gWaveVertexFlip + viewportID][0][var_t0]; + tri = &gWaveTriangles[gWaveVertexFlip + viewportID][0][j * (D_80129FC8.unk0 << 1)]; gSPVertexDKR(gWaveDL++, OS_K0_TO_PHYSICAL(vtx), numVerts << 1, 0); gSPPolygon(gWaveDL++, OS_K0_TO_PHYSICAL(tri), numTris, TRIN_ENABLE_TEXTURE); @@ -1012,8 +1016,8 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { var_t0 += D_80129FC8.unk0 + 1; } } else { - gSPVertexDKR(gWaveDL++, OS_K0_TO_PHYSICAL(&D_8012A028[D_8012A018]), 4, 0); - gSPPolygon(gWaveDL++, OS_K0_TO_PHYSICAL(&D_800E3090[D_8012A018 << 1]), 2, + gSPVertexDKR(gWaveDL++, OS_K0_TO_PHYSICAL(&D_8012A028[gWaveVertexFlip]), 4, 0); + gSPPolygon(gWaveDL++, OS_K0_TO_PHYSICAL(&D_800E3090[gWaveVertexFlip << 1]), 2, TRIN_ENABLE_TEXTURE); } apply_matrix_from_stack(&gWaveDL); @@ -1028,8 +1032,8 @@ void func_800BA8E4(Gfx **dList, MatrixS **mtx, s32 arg2) { numVerts = D_80129FC8.unk0 + 1; var_t0 = ((sp104 & 0xFF) - 1) * numVerts * numVerts; for (j = 0; j < D_80129FC8.unk0; j++) { - vtx = &gWaveVertices[D_8012A018 + arg2][0][var_t0]; - tri = &gWaveTriangles[D_8012A018 + arg2][0][j * (D_80129FC8.unk0 << 1)]; + vtx = &gWaveVertices[gWaveVertexFlip + viewportID][0][var_t0]; + tri = &gWaveTriangles[gWaveVertexFlip + viewportID][0][j * (D_80129FC8.unk0 << 1)]; gSPVertexDKR(gWaveDL++, OS_K0_TO_PHYSICAL(vtx), numVerts << 1, 0); gSPPolygon(gWaveDL++, OS_K0_TO_PHYSICAL(tri), numTris, TRIN_ENABLE_TEXTURE); diff --git a/src/waves.h b/src/waves.h index 589006cb..5151402a 100644 --- a/src/waves.h +++ b/src/waves.h @@ -143,7 +143,7 @@ void func_800BA288(s32 arg0, s32 arg1); void func_800BF9F8(unk800BF9F8 *arg0, f32 arg1, f32 arg2); unk800E3190 *func_800BF634(Object *obj, f32 xPos, f32 zPos, f32 arg3, s32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 arg8); void wave_init(void); -void func_800BA4B8(TextureHeader *tex, s32 rtile); +void wave_load_material(TextureHeader *tex, s32 rtile); Object_64 *func_800BE654(s32, f32, f32); void func_800BBF78(LevelModel *model); // Non Matching diff --git a/src/weather.c b/src/weather.c index 7c5a7608..e800194c 100644 --- a/src/weather.c +++ b/src/weather.c @@ -71,10 +71,10 @@ Object *gLensFlare = NULL; s32 gLensFlareOff = TRUE; s32 gLensFlareOverrideObjs = 0; Vec2f gRainQuad[4] = { - { -200.0f, 200.0f }, - { 200.0f, 200.0f }, - { 200.0f, -200.0f }, - { -200.0f, -200.0f }, + { { { -200.0f, 200.0f } } }, + { { { 200.0f, 200.0f } } }, + { { { 200.0f, -200.0f } } }, + { { { -200.0f, -200.0f } } }, }; Vertex gRainVertices[16] = { @@ -895,7 +895,7 @@ void rain_update(s32 updateRate) { if (gLightningFrequency > 255) { set_ortho_matrix_view(&gCurrWeatherDisplayList, &gCurrWeatherMatrix); for (i = 0; i < 2; i++) { - render_rain_overlay(&gRainGfx[i], updateRate); + rain_render(&gRainGfx[i], updateRate); } gDPSetPrimColor(gCurrWeatherDisplayList++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(gCurrWeatherDisplayList++, 255, 255, 255, 0); @@ -1072,7 +1072,10 @@ void rain_sound(UNUSED s32 updateRate) { } } -void render_rain_overlay(RainGfxData *rainGfx, s32 time) { +/** + * Set the intended UV coordinates for the current rain plane, then render it onscreen. + */ +void rain_render(RainGfxData *rainGfx, s32 time) { s32 u0; s32 v0; s32 vertical; diff --git a/src/weather.h b/src/weather.h index b391c3b5..40070deb 100644 --- a/src/weather.h +++ b/src/weather.h @@ -110,7 +110,7 @@ void rain_update(s32 updateRate); void rain_sound(s32 updateRate); void rain_render_splashes(s32 updateRate); void rain_lightning(s32 updateRate); -void render_rain_overlay(RainGfxData*, s32); +void rain_render(RainGfxData*, s32); void weather_update(Gfx **currDisplayList, MatrixS **currHudMat, Vertex **currHudVerts, Triangle **currHudTris, s32 updateRate); void snow_render(void); void weather_free(void); diff --git a/ver/splat/dkr.jpn.v79.yaml b/ver/splat/dkr.jpn.v79.yaml index d7dc18b4..7746ba82 100644 --- a/ver/splat/dkr.jpn.v79.yaml +++ b/ver/splat/dkr.jpn.v79.yaml @@ -357,7 +357,8 @@ segments: - [0xEAEA0, .rodata, weather] - [0xEAEF0, .rodata, particles] - [0xEB2B0, .rodata, printf] - - [0xEB520, .rodata, thread0_epc] + - [0xEB520, .rodata, ../libultra/src/debug/assert] + - [0xEB580, .rodata, thread0_epc] - [0xEB810, .rodata, waves] - [0xEB980, .rodata, fade_transition] - [0xEB9E0, .rodata, game_text] diff --git a/ver/splat/dkr.pal.v77.yaml b/ver/splat/dkr.pal.v77.yaml index fa473994..ca878e28 100644 --- a/ver/splat/dkr.pal.v77.yaml +++ b/ver/splat/dkr.pal.v77.yaml @@ -357,7 +357,8 @@ segments: - [0xE9480, .rodata, weather] - [0xE94D0, .rodata, particles] - [0xE9890, .rodata, printf] - - [0xE9B00, .rodata, thread0_epc] + - [0xE9B00, .rodata, ../libultra/src/debug/assert] + - [0xE9B60, .rodata, thread0_epc] - [0xE9DF0, .rodata, waves] - [0xE9F60, .rodata, fade_transition] - [0xE9FC0, .rodata, game_text] diff --git a/ver/splat/dkr.pal.v80.yaml b/ver/splat/dkr.pal.v80.yaml index 9e9c77b8..721665cd 100644 --- a/ver/splat/dkr.pal.v80.yaml +++ b/ver/splat/dkr.pal.v80.yaml @@ -357,7 +357,8 @@ segments: - [0xE9A00, .rodata, weather] - [0xE9A50, .rodata, particles] - [0xE9E10, .rodata, printf] - - [0xEA080, .rodata, thread0_epc] + - [0xEA080, .rodata, ../libultra/src/debug/assert] + - [0xEA0E0, .rodata, thread0_epc] - [0xEA370, .rodata, waves] - [0xEA4E0, .rodata, fade_transition] - [0xEA540, .rodata, game_text] diff --git a/ver/splat/dkr.us.v77.yaml b/ver/splat/dkr.us.v77.yaml index 6e2a76e0..ff063743 100644 --- a/ver/splat/dkr.us.v77.yaml +++ b/ver/splat/dkr.us.v77.yaml @@ -357,7 +357,8 @@ segments: - [0xE93F0, .rodata, weather] - [0xE9440, .rodata, particles] - [0xE9800, .rodata, printf] - - [0xE9A70, .rodata, thread0_epc] + - [0xE9A70, .rodata, ../libultra/src/debug/assert] + - [0xE9AD0, .rodata, thread0_epc] - [0xE9D60, .rodata, waves] - [0xE9ED0, .rodata, fade_transition] - [0xE9F30, .rodata, game_text] diff --git a/ver/splat/dkr.us.v80.yaml b/ver/splat/dkr.us.v80.yaml index 45295de7..84798adb 100644 --- a/ver/splat/dkr.us.v80.yaml +++ b/ver/splat/dkr.us.v80.yaml @@ -357,7 +357,8 @@ segments: - [0xE9970, .rodata, weather] - [0xE99C0, .rodata, particles] - [0xE9D80, .rodata, printf] - - [0xE9FF0, .rodata, thread0_epc] + - [0xE9FF0, .rodata, ../libultra/src/debug/assert] + - [0xEA050, .rodata, thread0_epc] - [0xEA2E0, .rodata, waves] - [0xEA450, .rodata, fade_transition] - [0xEA4B0, .rodata, game_text] diff --git a/ver/symbols/symbol_addrs.jpn.v79.txt b/ver/symbols/symbol_addrs.jpn.v79.txt index be746fac..d1a36a8e 100644 --- a/ver/symbols/symbol_addrs.jpn.v79.txt +++ b/ver/symbols/symbol_addrs.jpn.v79.txt @@ -1619,7 +1619,7 @@ rain_update = 0x800ADAB8; rain_render_splashes = 0x800ADC58; rain_lightning = 0x800AE0B8; rain_sound = 0x800AE1C8; -render_rain_overlay = 0x800AE2BC; +rain_render = 0x800AE2BC; // particles.c .text reset_particles = 0x800AE870; @@ -1733,7 +1733,7 @@ func_800B92F4 = 0x800B98F4; func_800B97A8 = 0x800B9DA8; func_800B9C18 = 0x800BA218; func_800BA288 = 0x800BA888; -func_800BA4B8 = 0x800BAAB8; +wave_load_material = 0x800BAAB8; func_800BA8E4 = 0x800BAEE4; func_800BB2F4 = 0x800BB8F4; func_800BBDDC = 0x800BC3DC; @@ -2747,8 +2747,8 @@ D_800E1E40 = 0x800E38D0; // game_ui.c .data D_800E1E60 = 0x800E38F0; gHudElementBase = 0x800E38F4; -D_800E25C4 = 0x800E4054; -D_800E2684 = 0x800E4114; +gHudPresets2P = 0x800E4054; +gHudPresets4P = 0x800E4114; gHudAudioData = 0x800E4200; gShowCourseDirections = 0x800E4220; D_800E2794 = 0x800E4224; @@ -4362,7 +4362,7 @@ gMinimapFade = 0x80128781; gShowHUD = 0x80128782; gMinimapXlu = 0x80128783; gRaceStartShowHudStep = 0x80128784; -D_80126CD5 = 0x80128785; +gHudPALScale = 0x80128785; gAssetHudElementStaleCounter = 0x80128788; gCurrentHud = 0x8012878C; gPlayerHud = 0x80128790; // size:0x10 @@ -4391,7 +4391,7 @@ gWrongWayNagPrefix = 0x801287E8; gRaceStartSoundMask = 0x801287EC; gHUDVoiceSoundMask = 0x801287F0; gHudBalloonSoundMask = 0x801287F4; -D_80126D48 = 0x801287F8; +gHudTTSoundID = 0x801287F8; D_80126D4C = 0x801287FC; D_80126D50 = 0x80128800; gMinimapRed = 0x80128804; @@ -4403,7 +4403,7 @@ gHudLevelHeader = 0x80128810; D_80126D64 = 0x80128814; D_80126D65 = 0x80128815; D_80126D66 = 0x80128816; -gStopwatchFaceID = 0x80128817; +gStopwatchAnimID = 0x80128817; D_80126D68 = 0x80128818; D_80126D69 = 0x80128819; gWrongWayNagTimer = 0x8012881C; @@ -4416,7 +4416,7 @@ gHudSprites = 0x80128830; D_80127180 = 0x80128C30; gHudSettings = 0x80128C34; gHudSilverCoinRace = 0x80128C38; -D_80127189 = 0x80128C39; +gAdventurePlayerFinish = 0x80128C39; D_8012718A = 0x80128C3A; gMinimapOpacityTarget = 0x80128C3B; gStopwatchErrorX = 0x80128C3C; @@ -4474,10 +4474,10 @@ gDebugPrintBufferEnd = 0x8012A088; // thread0_epc gEPCStack = 0x8012A090; gEPCThread = 0x8012B090; -D_80129790 = 0x8012B240; -D_801297A8 = 0x8012B258; -D_801297C8 = 0x8012B278; -D_801297E8 = 0x8012B298; +gEPCMesgQueue = 0x8012B240; +gEPCMesgBuf = 0x8012B258; +gEPCPIBuf = 0x8012B278; +gEPCPIQueue = 0x8012B298; gEpcInfo = 0x8012B2B0; // size:0x1B0 D_801299B0 = 0x8012B460; // size:0x100 @@ -4490,11 +4490,11 @@ gObjectStackTrace = 0x8012BA60; // size:0x10 gWaveDL = 0x8012BA70; D_80129FC4 = 0x8012BA74; D_80129FC8 = 0x8012BA78; // size:0x50 -D_8012A018 = 0x8012BAC8; +gWaveVertexFlip = 0x8012BAC8; D_8012A01C = 0x8012BACC; D_8012A020 = 0x8012BAD0; D_8012A028 = 0x8012BAD8; -D_8012A078 = 0x8012BB28; +gWavePlayerCount = 0x8012BB28; gWaveBatch = 0x8012BB2C; gWaveTexture = 0x8012BB30; D_8012A084 = 0x8012BB34; diff --git a/ver/symbols/symbol_addrs.pal.v77.txt b/ver/symbols/symbol_addrs.pal.v77.txt index f177ddd3..86e11a90 100644 --- a/ver/symbols/symbol_addrs.pal.v77.txt +++ b/ver/symbols/symbol_addrs.pal.v77.txt @@ -1610,7 +1610,7 @@ rain_update = 0x800AD548; rain_render_splashes = 0x800AD6E8; rain_lightning = 0x800ADB48; rain_sound = 0x800ADC58; -render_rain_overlay = 0x800ADD4C; +rain_render = 0x800ADD4C; reset_particles = 0x800AE300; reset_particles_with_assets = 0x800AE330; free_unknown_particle_sprites = 0x800AE368; @@ -1709,7 +1709,7 @@ func_800B92F4 = 0x800B9384; func_800B97A8 = 0x800B9838; func_800B9C18 = 0x800B9CA8; func_800BA288 = 0x800BA318; -func_800BA4B8 = 0x800BA548; +wave_load_material = 0x800BA548; func_800BA8E4 = 0x800BA974; func_800BB2F4 = 0x800BB384; func_800BBDDC = 0x800BBE6C; @@ -2591,8 +2591,8 @@ D_800E1E2C = 0x800E1EBC; D_800E1E40 = 0x800E1ED0; D_800E1E60 = 0x800E1EF0; gHudElementBase = 0x800E1EF4; -D_800E25C4 = 0x800E2654; -D_800E2684 = 0x800E2714; +gHudPresets2P = 0x800E2654; +gHudPresets4P = 0x800E2714; gHudAudioData = 0x800E2800; gShowCourseDirections = 0x800E2820; D_800E2794 = 0x800E2824; @@ -4051,7 +4051,7 @@ gMinimapFade = 0x80126D61; gShowHUD = 0x80126D62; gMinimapXlu = 0x80126D63; gRaceStartShowHudStep = 0x80126D64; -D_80126CD5 = 0x80126D65; +gHudPALScale = 0x80126D65; gAssetHudElementStaleCounter = 0x80126D68; gCurrentHud = 0x80126D6C; gPlayerHud = 0x80126D70; // size:0x10 @@ -4080,7 +4080,7 @@ gWrongWayNagPrefix = 0x80126DC8; gRaceStartSoundMask = 0x80126DCC; gHUDVoiceSoundMask = 0x80126DD0; gHudBalloonSoundMask = 0x80126DD4; -D_80126D48 = 0x80126DD8; +gHudTTSoundID = 0x80126DD8; D_80126D4C = 0x80126DDC; D_80126D50 = 0x80126DE0; gMinimapRed = 0x80126DE4; @@ -4092,7 +4092,7 @@ gHudLevelHeader = 0x80126DF0; D_80126D64 = 0x80126DF4; D_80126D65 = 0x80126DF5; D_80126D66 = 0x80126DF6; -gStopwatchFaceID = 0x80126DF7; +gStopwatchAnimID = 0x80126DF7; D_80126D68 = 0x80126DF8; D_80126D69 = 0x80126DF9; gWrongWayNagTimer = 0x80126DFC; @@ -4105,7 +4105,7 @@ gHudSprites = 0x80126E10; D_80127180 = 0x80127210; gHudSettings = 0x80127214; gHudSilverCoinRace = 0x80127218; -D_80127189 = 0x80127219; +gAdventurePlayerFinish = 0x80127219; D_8012718A = 0x8012721A; gMinimapOpacityTarget = 0x8012721B; gStopwatchErrorX = 0x8012721C; @@ -4153,10 +4153,10 @@ gDebugPrintBufferStart = 0x80127D68; gDebugPrintBufferEnd = 0x80128668; gEPCStack = 0x80128670; gEPCThread = 0x80129670; -D_80129790 = 0x80129820; -D_801297A8 = 0x80129838; -D_801297C8 = 0x80129858; -D_801297E8 = 0x80129878; +gEPCMesgQueue = 0x80129820; +gEPCMesgBuf = 0x80129838; +gEPCPIBuf = 0x80129858; +gEPCPIQueue = 0x80129878; gEpcInfo = 0x80129890; // size:0x1B0 D_801299B0 = 0x80129A40; // size:0x100 D_80129AB0 = 0x80129B40; // size:0x100 @@ -4165,11 +4165,11 @@ gObjectStackTrace = 0x8012A040; // size:0x10 gWaveDL = 0x8012A050; D_80129FC4 = 0x8012A054; D_80129FC8 = 0x8012A058; // size:0x50 -D_8012A018 = 0x8012A0A8; +gWaveVertexFlip = 0x8012A0A8; D_8012A01C = 0x8012A0AC; D_8012A020 = 0x8012A0B0; D_8012A028 = 0x8012A0B8; -D_8012A078 = 0x8012A108; +gWavePlayerCount = 0x8012A108; gWaveBatch = 0x8012A10C; gWaveTexture = 0x8012A110; D_8012A084 = 0x8012A114; diff --git a/ver/symbols/symbol_addrs.pal.v80.txt b/ver/symbols/symbol_addrs.pal.v80.txt index 1e13730a..7cedf795 100644 --- a/ver/symbols/symbol_addrs.pal.v80.txt +++ b/ver/symbols/symbol_addrs.pal.v80.txt @@ -1531,7 +1531,7 @@ rain_update = 0x800ADAA8; rain_render_splashes = 0x800ADC48; rain_lightning = 0x800AE0A8; rain_sound = 0x800AE1B8; -render_rain_overlay = 0x800AE2AC; +rain_render = 0x800AE2AC; reset_particles = 0x800AE860; reset_particles_with_assets = 0x800AE890; free_unknown_particle_sprites = 0x800AE8C8; @@ -1630,7 +1630,7 @@ func_800B92F4 = 0x800B98A4; func_800B97A8 = 0x800B9D58; func_800B9C18 = 0x800BA1C8; func_800BA288 = 0x800BA838; -func_800BA4B8 = 0x800BAA68; +wave_load_material = 0x800BAA68; func_800BA8E4 = 0x800BAE94; func_800BB2F4 = 0x800BB8A4; func_800BBDDC = 0x800BC38C; @@ -2519,8 +2519,8 @@ D_800E1E2C = 0x800E243C; D_800E1E40 = 0x800E2450; D_800E1E60 = 0x800E2470; gHudElementBase = 0x800E2474; -D_800E25C4 = 0x800E2BD4; -D_800E2684 = 0x800E2C94; +gHudPresets2P = 0x800E2BD4; +gHudPresets4P = 0x800E2C94; gHudAudioData = 0x800E2D80; gShowCourseDirections = 0x800E2DA0; D_800E2794 = 0x800E2DA4; @@ -3986,7 +3986,7 @@ gMinimapFade = 0x80127321; gShowHUD = 0x80127322; gMinimapXlu = 0x80127323; gRaceStartShowHudStep = 0x80127324; -D_80126CD5 = 0x80127325; +gHudPALScale = 0x80127325; gAssetHudElementStaleCounter = 0x80127328; gCurrentHud = 0x8012732C; gPlayerHud = 0x80127330; // size:0x10 @@ -4015,7 +4015,7 @@ gWrongWayNagPrefix = 0x80127388; gRaceStartSoundMask = 0x8012738C; gHUDVoiceSoundMask = 0x80127390; gHudBalloonSoundMask = 0x80127394; -D_80126D48 = 0x80127398; +gHudTTSoundID = 0x80127398; D_80126D4C = 0x8012739C; D_80126D50 = 0x801273A0; gMinimapRed = 0x801273A4; @@ -4027,7 +4027,7 @@ gHudLevelHeader = 0x801273B0; D_80126D64 = 0x801273B4; D_80126D65 = 0x801273B5; D_80126D66 = 0x801273B6; -gStopwatchFaceID = 0x801273B7; +gStopwatchAnimID = 0x801273B7; D_80126D68 = 0x801273B8; D_80126D69 = 0x801273B9; gWrongWayNagTimer = 0x801273BC; @@ -4040,7 +4040,7 @@ gHudSprites = 0x801273D0; D_80127180 = 0x801277D0; gHudSettings = 0x801277D4; gHudSilverCoinRace = 0x801277D8; -D_80127189 = 0x801277D9; +gAdventurePlayerFinish = 0x801277D9; D_8012718A = 0x801277DA; gMinimapOpacityTarget = 0x801277DB; gStopwatchErrorX = 0x801277DC; @@ -4088,10 +4088,10 @@ gDebugPrintBufferStart = 0x80128328; gDebugPrintBufferEnd = 0x80128C28; gEPCStack = 0x80128C30; gEPCThread = 0x80129C30; -D_80129790 = 0x80129DE0; -D_801297A8 = 0x80129DF8; -D_801297C8 = 0x80129E18; -D_801297E8 = 0x80129E38; +gEPCMesgQueue = 0x80129DE0; +gEPCMesgBuf = 0x80129DF8; +gEPCPIBuf = 0x80129E18; +gEPCPIQueue = 0x80129E38; gEpcInfo = 0x80129E50; // size:0x1B0 D_801299B0 = 0x8012A000; // size:0x100 D_80129AB0 = 0x8012A100; // size:0x100 @@ -4100,11 +4100,11 @@ gObjectStackTrace = 0x8012A600; // size:0x10 gWaveDL = 0x8012A610; D_80129FC4 = 0x8012A614; D_80129FC8 = 0x8012A618; // size:0x50 -D_8012A018 = 0x8012A668; +gWaveVertexFlip = 0x8012A668; D_8012A01C = 0x8012A66C; D_8012A020 = 0x8012A670; D_8012A028 = 0x8012A678; -D_8012A078 = 0x8012A6C8; +gWavePlayerCount = 0x8012A6C8; gWaveBatch = 0x8012A6CC; gWaveTexture = 0x8012A6D0; D_8012A084 = 0x8012A6D4; diff --git a/ver/symbols/symbol_addrs.us.v77.txt b/ver/symbols/symbol_addrs.us.v77.txt index 1e1a3644..ad792380 100644 --- a/ver/symbols/symbol_addrs.us.v77.txt +++ b/ver/symbols/symbol_addrs.us.v77.txt @@ -1614,7 +1614,7 @@ rain_update = 0x800AD4B8; rain_render_splashes = 0x800AD658; rain_lightning = 0x800ADAB8; rain_sound = 0x800ADBC8; -render_rain_overlay = 0x800ADCBC; +rain_render = 0x800ADCBC; // particles.c .text reset_particles = 0x800AE270; @@ -1727,7 +1727,7 @@ func_800B92F4 = 0x800B92F4; func_800B97A8 = 0x800B97A8; func_800B9C18 = 0x800B9C18; func_800BA288 = 0x800BA288; -func_800BA4B8 = 0x800BA4B8; +wave_load_material = 0x800BA4B8; func_800BA8E4 = 0x800BA8E4; func_800BB2F4 = 0x800BB2F4; func_800BBDDC = 0x800BBDDC; @@ -2738,8 +2738,8 @@ D_800E1E40 = 0x800E1E40; // game_ui.c .data D_800E1E60 = 0x800E1E60; gHudElementBase = 0x800E1E64; -D_800E25C4 = 0x800E25C4; -D_800E2684 = 0x800E2684; +gHudPresets2P = 0x800E25C4; +gHudPresets4P = 0x800E2684; gHudAudioData = 0x800E2770; gShowCourseDirections = 0x800E2790; D_800E2794 = 0x800E2794; @@ -4482,7 +4482,7 @@ gMinimapFade = 0x80126CD1; gShowHUD = 0x80126CD2; gMinimapXlu = 0x80126CD3; gRaceStartShowHudStep = 0x80126CD4; -D_80126CD5 = 0x80126CD5; +gHudPALScale = 0x80126CD5; gAssetHudElementStaleCounter = 0x80126CD8; gCurrentHud = 0x80126CDC; gPlayerHud = 0x80126CE0; // size:0x10 @@ -4511,7 +4511,7 @@ gWrongWayNagPrefix = 0x80126D38; gRaceStartSoundMask = 0x80126D3C; gHUDVoiceSoundMask = 0x80126D40; gHudBalloonSoundMask = 0x80126D44; -D_80126D48 = 0x80126D48; +gHudTTSoundID = 0x80126D48; D_80126D4C = 0x80126D4C; D_80126D50 = 0x80126D50; gMinimapRed = 0x80126D54; @@ -4523,7 +4523,7 @@ gHudLevelHeader = 0x80126D60; D_80126D64 = 0x80126D64; D_80126D65 = 0x80126D65; D_80126D66 = 0x80126D66; -gStopwatchFaceID = 0x80126D67; +gStopwatchAnimID = 0x80126D67; D_80126D68 = 0x80126D68; D_80126D69 = 0x80126D69; gWrongWayNagTimer = 0x80126D6C; @@ -4536,7 +4536,7 @@ gHudSprites = 0x80126D80; D_80127180 = 0x80127180; gHudSettings = 0x80127184; gHudSilverCoinRace = 0x80127188; -D_80127189 = 0x80127189; +gAdventurePlayerFinish = 0x80127189; D_8012718A = 0x8012718A; gMinimapOpacityTarget = 0x8012718B; gStopwatchErrorX = 0x8012718C; @@ -4594,10 +4594,10 @@ gDebugPrintBufferEnd = 0x801285D8; // thread0_epc gEPCStack = 0x801285E0; gEPCThread = 0x801295E0; -D_80129790 = 0x80129790; -D_801297A8 = 0x801297A8; -D_801297C8 = 0x801297C8; -D_801297E8 = 0x801297E8; +gEPCMesgQueue = 0x80129790; +gEPCMesgBuf = 0x801297A8; +gEPCPIBuf = 0x801297C8; +gEPCPIQueue = 0x801297E8; gEpcInfo = 0x80129800; // size:0x1B0 D_801299B0 = 0x801299B0; // size:0x100 @@ -4610,11 +4610,11 @@ gObjectStackTrace = 0x80129FB0; // size:0x10 gWaveDL = 0x80129FC0; D_80129FC4 = 0x80129FC4; D_80129FC8 = 0x80129FC8; // size:0x50 -D_8012A018 = 0x8012A018; +gWaveVertexFlip = 0x8012A018; D_8012A01C = 0x8012A01C; D_8012A020 = 0x8012A020; D_8012A028 = 0x8012A028; -D_8012A078 = 0x8012A078; +gWavePlayerCount = 0x8012A078; gWaveBatch = 0x8012A07C; gWaveTexture = 0x8012A080; D_8012A084 = 0x8012A084; diff --git a/ver/symbols/symbol_addrs.us.v80.txt b/ver/symbols/symbol_addrs.us.v80.txt index 6af8bb1f..4338572d 100644 --- a/ver/symbols/symbol_addrs.us.v80.txt +++ b/ver/symbols/symbol_addrs.us.v80.txt @@ -1530,7 +1530,7 @@ rain_update = 0x800ADA18; rain_render_splashes = 0x800ADBB8; rain_lightning = 0x800AE018; rain_sound = 0x800AE128; -render_rain_overlay = 0x800AE21C; +rain_render = 0x800AE21C; reset_particles = 0x800AE7D0; reset_particles_with_assets = 0x800AE800; free_unknown_particle_sprites = 0x800AE838; @@ -1629,7 +1629,7 @@ func_800B92F4 = 0x800B9814; func_800B97A8 = 0x800B9CC8; func_800B9C18 = 0x800BA138; func_800BA288 = 0x800BA7A8; -func_800BA4B8 = 0x800BA9D8; +wave_load_material = 0x800BA9D8; func_800BA8E4 = 0x800BAE04; func_800BB2F4 = 0x800BB814; func_800BBDDC = 0x800BC2FC; @@ -2516,8 +2516,8 @@ D_800E1E2C = 0x800E23AC; D_800E1E40 = 0x800E23C0; D_800E1E60 = 0x800E23E0; gHudElementBase = 0x800E23E4; -D_800E25C4 = 0x800E2B44; -D_800E2684 = 0x800E2C04; +gHudPresets2P = 0x800E2B44; +gHudPresets4P = 0x800E2C04; gHudAudioData = 0x800E2CF0; gShowCourseDirections = 0x800E2D10; D_800E2794 = 0x800E2D14; @@ -3981,7 +3981,7 @@ gMinimapFade = 0x80127291; gShowHUD = 0x80127292; gMinimapXlu = 0x80127293; gRaceStartShowHudStep = 0x80127294; -D_80126CD5 = 0x80127295; +gHudPALScale = 0x80127295; gAssetHudElementStaleCounter = 0x80127298; gCurrentHud = 0x8012729C; gPlayerHud = 0x801272A0; // size:0x10 @@ -4010,7 +4010,7 @@ gWrongWayNagPrefix = 0x801272F8; gRaceStartSoundMask = 0x801272FC; gHUDVoiceSoundMask = 0x80127300; gHudBalloonSoundMask = 0x80127304; -D_80126D48 = 0x80127308; +gHudTTSoundID = 0x80127308; D_80126D4C = 0x8012730C; D_80126D50 = 0x80127310; gMinimapRed = 0x80127314; @@ -4022,7 +4022,7 @@ gHudLevelHeader = 0x80127320; D_80126D64 = 0x80127324; D_80126D65 = 0x80127325; D_80126D66 = 0x80127326; -gStopwatchFaceID = 0x80127327; +gStopwatchAnimID = 0x80127327; D_80126D68 = 0x80127328; D_80126D69 = 0x80127329; gWrongWayNagTimer = 0x8012732C; @@ -4035,7 +4035,7 @@ gHudSprites = 0x80127340; D_80127180 = 0x80127740; gHudSettings = 0x80127744; gHudSilverCoinRace = 0x80127748; -D_80127189 = 0x80127749; +gAdventurePlayerFinish = 0x80127749; D_8012718A = 0x8012774A; gMinimapOpacityTarget = 0x8012774B; gStopwatchErrorX = 0x8012774C; @@ -4083,10 +4083,10 @@ gDebugPrintBufferStart = 0x80128298; gDebugPrintBufferEnd = 0x80128B98; gEPCStack = 0x80128BA0; gEPCThread = 0x80129BA0; -D_80129790 = 0x80129D50; -D_801297A8 = 0x80129D68; -D_801297C8 = 0x80129D88; -D_801297E8 = 0x80129DA8; +gEPCMesgQueue = 0x80129D50; +gEPCMesgBuf = 0x80129D68; +gEPCPIBuf = 0x80129D88; +gEPCPIQueue = 0x80129DA8; gEpcInfo = 0x80129DC0; // size:0x1B0 D_801299B0 = 0x80129F70; // size:0x100 D_80129AB0 = 0x8012A070; // size:0x100 @@ -4095,11 +4095,11 @@ gObjectStackTrace = 0x8012A570; // size:0x10 gWaveDL = 0x8012A580; D_80129FC4 = 0x8012A584; D_80129FC8 = 0x8012A588; // size:0x50 -D_8012A018 = 0x8012A5D8; +gWaveVertexFlip = 0x8012A5D8; D_8012A01C = 0x8012A5DC; D_8012A020 = 0x8012A5E0; D_8012A028 = 0x8012A5E8; -D_8012A078 = 0x8012A638; +gWavePlayerCount = 0x8012A638; gWaveBatch = 0x8012A63C; gWaveTexture = 0x8012A640; D_8012A084 = 0x8012A644; diff --git a/ver/symbols/undefined_syms.txt b/ver/symbols/undefined_syms.txt index 8c42cec4..0f08ffa7 100644 --- a/ver/symbols/undefined_syms.txt +++ b/ver/symbols/undefined_syms.txt @@ -2,7 +2,7 @@ The exact address isn't the same for each region, so I'm doing a hacky offset from the previous BSS variable that is declared */ -gEpcInfo = D_801297E8 + 0x18; +gEpcInfo = gEPCPIQueue + 0x18; D_801299B0 = gEpcInfo + 0x1B0; /* We have to define these addresses because they're hasm and share space with the coss funcs. */ diff --git a/yaml.patch b/yaml.patch new file mode 100644 index 00000000..8e9a1b26 --- /dev/null +++ b/yaml.patch @@ -0,0 +1,70 @@ +diff --git a/ver/splat/dkr.jpn.v79.yaml b/ver/splat/dkr.jpn.v79.yaml +index d7dc18b4..7746ba82 100644 +--- a/ver/splat/dkr.jpn.v79.yaml ++++ b/ver/splat/dkr.jpn.v79.yaml +@@ -357,7 +357,8 @@ segments: + - [0xEAEA0, .rodata, weather] + - [0xEAEF0, .rodata, particles] + - [0xEB2B0, .rodata, printf] +- - [0xEB520, .rodata, thread0_epc] ++ - [0xEB520, .rodata, ../libultra/src/debug/assert] ++ - [0xEB580, .rodata, thread0_epc] + - [0xEB810, .rodata, waves] + - [0xEB980, .rodata, fade_transition] + - [0xEB9E0, .rodata, game_text] +diff --git a/ver/splat/dkr.pal.v77.yaml b/ver/splat/dkr.pal.v77.yaml +index fa473994..ca878e28 100644 +--- a/ver/splat/dkr.pal.v77.yaml ++++ b/ver/splat/dkr.pal.v77.yaml +@@ -357,7 +357,8 @@ segments: + - [0xE9480, .rodata, weather] + - [0xE94D0, .rodata, particles] + - [0xE9890, .rodata, printf] +- - [0xE9B00, .rodata, thread0_epc] ++ - [0xE9B00, .rodata, ../libultra/src/debug/assert] ++ - [0xE9B60, .rodata, thread0_epc] + - [0xE9DF0, .rodata, waves] + - [0xE9F60, .rodata, fade_transition] + - [0xE9FC0, .rodata, game_text] +diff --git a/ver/splat/dkr.pal.v80.yaml b/ver/splat/dkr.pal.v80.yaml +index 9e9c77b8..721665cd 100644 +--- a/ver/splat/dkr.pal.v80.yaml ++++ b/ver/splat/dkr.pal.v80.yaml +@@ -357,7 +357,8 @@ segments: + - [0xE9A00, .rodata, weather] + - [0xE9A50, .rodata, particles] + - [0xE9E10, .rodata, printf] +- - [0xEA080, .rodata, thread0_epc] ++ - [0xEA080, .rodata, ../libultra/src/debug/assert] ++ - [0xEA0E0, .rodata, thread0_epc] + - [0xEA370, .rodata, waves] + - [0xEA4E0, .rodata, fade_transition] + - [0xEA540, .rodata, game_text] +diff --git a/ver/splat/dkr.us.v77.yaml b/ver/splat/dkr.us.v77.yaml +index 6e2a76e0..ff063743 100644 +--- a/ver/splat/dkr.us.v77.yaml ++++ b/ver/splat/dkr.us.v77.yaml +@@ -357,7 +357,8 @@ segments: + - [0xE93F0, .rodata, weather] + - [0xE9440, .rodata, particles] + - [0xE9800, .rodata, printf] +- - [0xE9A70, .rodata, thread0_epc] ++ - [0xE9A70, .rodata, ../libultra/src/debug/assert] ++ - [0xE9AD0, .rodata, thread0_epc] + - [0xE9D60, .rodata, waves] + - [0xE9ED0, .rodata, fade_transition] + - [0xE9F30, .rodata, game_text] +diff --git a/ver/splat/dkr.us.v80.yaml b/ver/splat/dkr.us.v80.yaml +index 45295de7..84798adb 100644 +--- a/ver/splat/dkr.us.v80.yaml ++++ b/ver/splat/dkr.us.v80.yaml +@@ -357,7 +357,8 @@ segments: + - [0xE9970, .rodata, weather] + - [0xE99C0, .rodata, particles] + - [0xE9D80, .rodata, printf] +- - [0xE9FF0, .rodata, thread0_epc] ++ - [0xE9FF0, .rodata, ../libultra/src/debug/assert] ++ - [0xEA050, .rodata, thread0_epc] + - [0xEA2E0, .rodata, waves] + - [0xEA450, .rodata, fade_transition] + - [0xEA4B0, .rodata, game_text]