diff --git a/README.md b/README.md index 9f9f00d3..b71b9e76 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the All versions are supported, and the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9670) of the game is the default if not specified. -As of May 19, 2025, this is our current score: +As of May 21, 2025, this is our current score: -    Decomp progress: 88.06% +    Decomp progress: 88.16% -    Documentation progress: 56.98% +    Documentation progress: 56.99% --- @@ -117,15 +117,15 @@ s32 is_drumstick_unlocked(void) { ``` -As of May 19, 2025, this is our current score: +As of May 21, 2025, this is our current score: ``` ===================================================================== ADVENTURE ONE (ASM -> C Decompilation) - --------------- 88.06% Complete (89.02% NON_MATCHING) --------------- - # Decompiled functions: 1898 - # GLOBAL_ASM remaining: 53 + --------------- 88.16% Complete (89.12% NON_MATCHING) --------------- + # Decompiled functions: 1899 + # GLOBAL_ASM remaining: 52 # NON_MATCHING functions: 5 - # NON_EQUIVALENT WIP functions: 16 + # NON_EQUIVALENT WIP functions: 15 ---------------------------- Game Status ---------------------------- Balloons: 41/47, Keys: 4/4, Trophies: 4/5 T.T. Amulets: 4/4, Wizpig Amulets: 4/4 @@ -133,9 +133,9 @@ As of May 19, 2025, this is our current score: We are racing in Spaceport Alpha. (Lap 1/3) ===================================================================== ADVENTURE TWO (Cleanup & Documentation) - -------------------------- 56.98% Complete -------------------------- - # Documented functions: 1179 - # Undocumented remaining: 475 + -------------------------- 56.99% Complete -------------------------- + # Documented functions: 1181 + # Undocumented remaining: 473 ---------------------------- Game Status ---------------------------- Balloons: 27/47, Keys: 3/4, Trophies: 2/5 T.T. Amulets: 3/4, Wizpig Amulets: 2/4 diff --git a/include/object_properties.h b/include/object_properties.h index 36e3785a..55ee9198 100644 --- a/include/object_properties.h +++ b/include/object_properties.h @@ -170,6 +170,11 @@ typedef struct ObjPropertyTimeTrial { struct ObjectHeader *header; } ObjPropertyTimeTrial; +typedef struct ObjPropertyBoost { + struct Object *obj; + s32 unk4; +} ObjPropertyBoost; + typedef struct ObjProperties { union { ObjPropertyCommon common; @@ -204,6 +209,7 @@ typedef struct ObjProperties { ObjPropertyWeapon weapon; ObjPropertyCamControl camControl; ObjPropertyTimeTrial timeTrial; + ObjPropertyBoost boost; }; } ObjProperties; diff --git a/include/structs.h b/include/structs.h index 0fe35c5e..eaeb252a 100644 --- a/include/structs.h +++ b/include/structs.h @@ -1660,6 +1660,7 @@ typedef struct Object_CharacterSelect { typedef struct Object_64 { union { + struct Object *obj; Object_Laser laser; Object_TrophyCabinet trophy_cabinet; Object_Animator animator; @@ -1761,7 +1762,10 @@ typedef struct unk800B2260_C { /* Size: 0x018 bytes */ typedef struct ObjectTransform { /* 0x0000 */ Vec3s rotation; + union { /* 0x0006 */ s16 flags; + /* 0x0006 */ s16 spriteID; + }; /* 0x0008 */ f32 scale; /* 0x000C */ f32 x_position; /* 0x0010 */ f32 y_position; diff --git a/src/audio_spatial.h b/src/audio_spatial.h index bcc339ce..17c8649b 100644 --- a/src/audio_spatial.h +++ b/src/audio_spatial.h @@ -79,7 +79,7 @@ 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 **objList, s32 numObjects, s32 updateRate); // Non Matching -void func_80006FC8(Object **objs, s32 numRacers, Camera *segment, u8 arg3, s32 updateRate); // Non Matching +void func_80006FC8(Object **objs, s32 numRacers, Camera *camera, u8 arg3, s32 updateRate); // Non Matching u8 audspat_reverb_get_strength_at_point(ReverbLine *, f32, f32, f32); #endif diff --git a/src/audio_vehicle.c b/src/audio_vehicle.c index a40889c4..6f267553 100644 --- a/src/audio_vehicle.c +++ b/src/audio_vehicle.c @@ -661,8 +661,8 @@ void func_80006FC8(Object **objs, s32 numRacers, Camera *camera, u8 arg3, s32 up var_f26 = 2250000.0f; //(1500.0f * 1500.0f) var_f26 = (var_f26 - (gRacerSound->unk84 * gRacerSound->unk84)) / var_f26; var_f26 *= var_f26; - gRacerSound->unk91[0] = audspat_calculate_spatial_pan( - tempxPos, tempzPos, camera[loopCount1].trans.rotation.y_rotation); + gRacerSound->unk91[0] = + audspat_calculate_spatial_pan(tempxPos, tempzPos, camera[loopCount1].trans.rotation.y_rotation); } else { var_f26 = 0.0f; } diff --git a/src/camera.c b/src/camera.c index 59fcc07f..2c966adf 100644 --- a/src/camera.c +++ b/src/camera.c @@ -59,11 +59,11 @@ Vp gViewportStack[20] = { }; ObjectTransform D_800DD288 = { - { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, -281.0f, + { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, -281.0f, }; ObjectTransform D_800DD2A0 = { - { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f, + { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f, }; Matrix gOrthoMatrixF = { @@ -950,7 +950,7 @@ void set_ortho_matrix_view(Gfx **dList, MatrixS **mtx) { void func_8006807C(Gfx **dList, MatrixS **mtx) { object_inverse_transform_to_matrix(gCurrentModelMatrixF, &D_800DD288); f32_matrix_mult(&gCurrentModelMatrixF, &gPerspectiveMatrixF, &gViewMatrixF); - object_inverse_transform_to_matrix((float (*)[4]) gModelMatrixF[0], &D_800DD2A0); + object_inverse_transform_to_matrix((float(*)[4]) gModelMatrixF[0], &D_800DD2A0); f32_matrix_mult(gModelMatrixF[0], &gViewMatrixF, &gCurrentModelMatrixF); f32_matrix_to_s16_matrix(&gCurrentModelMatrixF, *mtx); gSPMatrixDKR((*dList)++, OS_K0_TO_PHYSICAL((*mtx)++), G_MTX_DKR_INDEX_0); diff --git a/src/camera.h b/src/camera.h index fa10bbd5..c790a0fa 100644 --- a/src/camera.h +++ b/src/camera.h @@ -121,7 +121,7 @@ void copy_framebuffer_size_to_coords(s32 *x1, s32 *y1, s32 *x2, s32 *y2); void set_ortho_matrix_height(f32 value); void set_ortho_matrix_view(Gfx **dList, MatrixS **mtx); void func_8006807C(Gfx **dList, MatrixS **mtx); -void viewport_rsp_set(Gfx **dList, s32 width, s32 height, s32 posX, s32 posY); +void viewport_rsp_set(Gfx **dList, s32 halfWidth, s32 halfHeight, s32 centerX, s32 centerY); void viewport_reset(Gfx **dList); void matrix_world_origin(Gfx **dList, MatrixS **mtx); void sprite_anim_off(s32 setting); diff --git a/src/hasm/math_util.c b/src/hasm/math_util.c index dc195d81..733b2502 100644 --- a/src/hasm/math_util.c +++ b/src/hasm/math_util.c @@ -163,7 +163,7 @@ GLOBAL_ASM("asm/math_util/f32_matrix_mult.s") #ifdef NON_MATCHING /* Official name: mathMtxF2L */ void f32_matrix_to_s16_matrix(Matrix *input, MatrixS *output) { - guMtxF2L((float (*)[4]) input, (Mtx *) output); + guMtxF2L((float(*)[4]) input, (Mtx *) output); } #else GLOBAL_ASM("asm/math_util/f32_matrix_to_s16_matrix.s") diff --git a/src/math_util.h b/src/math_util.h index 2f02839b..a998ed7f 100644 --- a/src/math_util.h +++ b/src/math_util.h @@ -48,7 +48,7 @@ void object_transform_to_matrix(Matrix mtx, ObjectTransform *trans); void f32_matrix_scale_y_axis(Matrix *input, f32 scale); void f32_matrix_translate_y_axis(Matrix *input, f32 offset); void object_inverse_transform_to_matrix(Matrix mtx, ObjectTransform *trans); -void f32_matrix_from_rotation_and_scale(Matrix mtx, s32 angle, f32 arg2, f32 arg3); +void f32_matrix_from_rotation_and_scale(Matrix mtx, s32 angle, f32 scale, f32 scaleY); void s16_vec3_apply_object_rotation(ObjectTransform *trans, s16 *vec3Arg); void f32_vec3_apply_object_rotation(ObjectTransform *trans, f32 *vec3_f32); void f32_vec3_apply_object_rotation2(ObjectTransform *trans, f32 *arg1); diff --git a/src/menu.c b/src/menu.c index 2d7e403b..fa51a023 100644 --- a/src/menu.c +++ b/src/menu.c @@ -586,32 +586,32 @@ s8 gDialogueOptionTangible = FALSE; s32 unused_800DF4F0[] = { 0x4000, 0x8000, 0x1000, 0x2000, 0x8000, 0x10, 0x400, 0x00 }; MenuAsset sMenuImageProperties[18] = { - { 0, 0, 0, 0x00, 1.0f, 0.0f, 0.0f, -32.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x01, 1.0f, 0.0f, 0.0f, -32.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x02, 1.0f, 0.0f, 0.0f, -32.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x03, 1.0f, 0.0f, 0.0f, -32.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x05, 0.215f, 0.0f, 0.0f, -500.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x06, 0.215f, 0.0f, 0.0f, -500.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x07, 0.215f, 0.0f, 0.0f, -500.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x04, 0.125f, 0.0f, -40.0f, -500.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x00 }, 1.0f, 0.0f, 0.0f, -32.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x01 }, 1.0f, 0.0f, 0.0f, -32.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x02 }, 1.0f, 0.0f, 0.0f, -32.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x03 }, 1.0f, 0.0f, 0.0f, -32.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x05 }, 0.215f, 0.0f, 0.0f, -500.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x06 }, 0.215f, 0.0f, 0.0f, -500.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x07 }, 0.215f, 0.0f, 0.0f, -500.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x04 }, 0.125f, 0.0f, -40.0f, -500.0f }, 0, 0, 0, 0, 0, 0, 0 }, #if VERSION >= VERSION_79 - { 0, 0, 0, 0x66, 0.75f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x67, 0.75f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x66 }, 0.75f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x67 }, 0.75f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, #else - { 0, 0, 0, 0x5B, 0.75f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x5C, 0.75f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x5B }, 0.75f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x5C }, 0.75f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, #endif - { 0, 0, 0, 0x42, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x40, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x41, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x4C, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x4D, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x4E, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0x4F, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x42 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x40 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x41 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x4C }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x4D }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x4E }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x4F }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, #if VERSION >= VERSION_79 - { 0, 0, 0, 0x68, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x68 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, #else - { 0, 0, 0, 0x5D, 1.0f, 0.0f, 0.0f, 0.0f, 0, 0, 0, 0, 0, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0x5D }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0, 0, 0, 0, 0, 0 }, #endif }; @@ -687,27 +687,24 @@ unk800DF83C gTitleCinematicText[10] = { }; #if REGION == REGION_JP -char D_800E13A4_E1FA4[] = { 0x80, 0x62, 0x80, 0x46, 0x80, 0x4F, 0x80, 0x8B, 0x80, 0x3B, 0x00, 0x00 }; - -char D_800E13B0_E1FB0[] = { 0x80, 0x8B, 0x80, 0x4F, 0x80, 0x90, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; -char D_800E13BC_E1FBC[] = { 0x80, 0x59, 0x80, 0x4F, 0x80, 0x55, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; - -char D_800E13C8_E1FC8[] = { 0x80, 0x62, 0x80, 0x46, 0x80, 0x4A, 0x80, 0x92, - 0x80, 0x5F, 0x80, 0x4A, 0x80, 0x92, 0x00, 0x00 }; -char D_800E13D8_E1FD8[] = { 0x80, 0x8A, 0x80, 0x76, 0x80, 0x70, 0x80, 0x5C, 0x80, 0x62, - 0x80, 0x46, 0x80, 0x4A, 0x80, 0x57, 0x00, 0x00, 0x00, 0x00 }; - -char D_800E13EC_E1FEC[] = { 0x80, 0x91, 0x80, 0x92, 0x80, 0x5B, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; -char D_800E13F8_E1FF8[] = { 0x80, 0x8B, 0x80, 0x4F, 0x80, 0x82, 0x80, 0x4D, 0x80, 0x3B, 0x00, 0x00 }; - -char D_800E1404_E2004[] = { 0x80, 0x57, 0x80, 0x76, 0x80, 0x4F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00 }; -char D_800E1410_E2010[] = { 0x80, 0x52, 0x80, 0x46, 0x80, 0x83, 0x80, 0x91, - 0x80, 0x4A, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x00 }; - -char D_800E1420_E2020[] = { 0x80, 0x89, 0x80, 0x46, 0x80, 0x89, 0x80, 0x46, 0x80, 0x3B, 0x00, 0x00 }; - -char *D_800E142C_E202C[] = { D_800E13A4_E1FA4, D_800E13B0_E1FB0, D_800E13BC_E1FBC, D_800E13C8_E1FC8, D_800E13D8_E1FD8, - D_800E13EC_E1FEC, D_800E13F8_E1FF8, D_800E1404_E2004, D_800E1410_E2010, D_800E1420_E2020 }; +char gTimberNameJpn[] = { 0x80, 0x62, 0x80, 0x46, 0x80, 0x4F, 0x80, 0x8B, 0x80, 0x3B, 0x00, 0x00 }; +char gBumperNameJpn[] = { 0x80, 0x8B, 0x80, 0x4F, 0x80, 0x90, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; +char gConkerNameJpn[] = { 0x80, 0x59, 0x80, 0x4F, 0x80, 0x55, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; +char gTiptupNameJpn[] = { + 0x80, 0x62, 0x80, 0x46, 0x80, 0x4A, 0x80, 0x92, 0x80, 0x5F, 0x80, 0x4A, 0x80, 0x92, 0x00, 0x00 +}; +char gDrumstickNameJpn[] = { 0x80, 0x8A, 0x80, 0x76, 0x80, 0x70, 0x80, 0x5C, 0x80, 0x62, + 0x80, 0x46, 0x80, 0x4A, 0x80, 0x57, 0x00, 0x00, 0x00, 0x00 }; +char gPipsyNameJpn[] = { 0x80, 0x91, 0x80, 0x92, 0x80, 0x5B, 0x80, 0x3B, 0x00, 0x00, 0x00, 0x00 }; +char gBanjoNameJpn[] = { 0x80, 0x8B, 0x80, 0x4F, 0x80, 0x82, 0x80, 0x4D, 0x80, 0x3B, 0x00, 0x00 }; +char gKrunchNameJpn[] = { 0x80, 0x57, 0x80, 0x76, 0x80, 0x4F, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00 }; +char gWizpigNameJpn[] = { + 0x80, 0x52, 0x80, 0x46, 0x80, 0x83, 0x80, 0x91, 0x80, 0x4A, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x00 +}; +char gDiddyNameJpn[] = { 0x80, 0x89, 0x80, 0x46, 0x80, 0x89, 0x80, 0x46, 0x80, 0x3B, 0x00, 0x00 }; +// Japanese text for the character names in the title screen cinematic. +char *gTitleCinematicTextJpn[] = { gTimberNameJpn, gBumperNameJpn, gConkerNameJpn, gTiptupNameJpn, gDrumstickNameJpn, + gPipsyNameJpn, gBanjoNameJpn, gKrunchNameJpn, gWizpigNameJpn, gDiddyNameJpn }; #endif // Number of active colours used in the title screen cinematic. @@ -725,7 +722,8 @@ UNUSED u8 unused_800DFA0C[] = { 0, 0, 15, 120 }; char *gOptionMenuStrings[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -s16 gOptionMenuTextures[] = { 0x3D, 0x3C, 0x3F, 0x3E, 0x44, -1, -1, 0 }; +s16 gOptionMenuTextures[] = { 0x3D, 0x3C, 0x3F, 0x3E, 0x44, -1 }; +s16 gOptionMenuImageIndices[] = { -1 }; unk800DFA3C gAudioMenuStrings[] = { { 160, 80, 255, 255, 255, 0, 255, ASSET_FONTS_FUNFONT, 12, NULL }, @@ -2676,8 +2674,8 @@ void menu_timestamp_render(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, sMenuGuiColourG = green; sMenuGuiColourB = blue; if (fontID == ASSET_FONTS_FUNFONT) { - gMenuImages[0].y = yPos; - gMenuImages[1].y = yPos - 2; + gMenuImages[0].trans.y_position = yPos; + gMenuImages[1].trans.y_position = yPos - 2; imageIndex = 0; imageIndex2 = 1; xPos -= 39; @@ -2685,8 +2683,8 @@ void menu_timestamp_render(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, xOffset2 = 11; xOffset3 = 10; } else { - gMenuImages[2].y = yPos; - gMenuImages[3].y = yPos - 1; + gMenuImages[2].trans.y_position = yPos; + gMenuImages[3].trans.y_position = yPos - 1; imageIndex = 2; imageIndex2 = 3; xPos -= 28; @@ -2699,40 +2697,40 @@ void menu_timestamp_render(s32 frameCount, s32 xPos, s32 yPos, u8 red, u8 green, sprite_opaque(FALSE); gMenuImages[imageIndex].spriteOffset = minutes / 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); xPos += xOffset1; gMenuImages[imageIndex].spriteOffset = minutes % 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); xPos += xOffset2; - gMenuImages[imageIndex2].x = xPos; + gMenuImages[imageIndex2].trans.x_position = xPos; menu_element_render(imageIndex2); xPos += xOffset3; gMenuImages[imageIndex].spriteOffset = seconds / 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); xPos += xOffset1; gMenuImages[imageIndex].spriteOffset = seconds % 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); xPos += xOffset2; - gMenuImages[imageIndex2].x = xPos; + gMenuImages[imageIndex2].trans.x_position = xPos; menu_element_render(imageIndex2); xPos += xOffset3; gMenuImages[imageIndex].spriteOffset = hundredths / 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); xPos += xOffset1; gMenuImages[imageIndex].spriteOffset = hundredths % 10; - gMenuImages[imageIndex].x = xPos; + gMenuImages[imageIndex].trans.x_position = xPos; menu_element_render(imageIndex); sprite_anim_off(FALSE); @@ -2791,9 +2789,9 @@ void menu_number_render(s32 number, s32 x, s32 y, s32 r, s32 g, s32 b, s32 a, UN sprite_opaque(0); sprite_anim_off(TRUE); if (powerOfTen && number) {} // Fakematch - gMenuImages[0].y = y; + gMenuImages[0].trans.y_position = y; for (i = 0; i < strLen; i++) { - gMenuImages[0].x = x; + gMenuImages[0].trans.x_position = x; gMenuImages[0].spriteOffset = digits[i]; menu_element_render(0); x += 12; @@ -2981,13 +2979,14 @@ void draw_menu_elements(s32 state, MenuElement *elems, f32 scale) { } sprite_anim_off(TRUE); sprite_opaque(FALSE); - gMenuImages[elems->t.assetID].x = xPos - SCREEN_WIDTH_HALF; - gMenuImages[elems->t.assetID].y = (-yPos - gPostraceTimestampOffset) + SCREEN_HEIGHT_HALF; + gMenuImages[elems->t.assetID].trans.x_position = xPos - SCREEN_WIDTH_HALF; + gMenuImages[elems->t.assetID].trans.y_position = + (-yPos - gPostraceTimestampOffset) + SCREEN_HEIGHT_HALF; gMenuImages[elems->t.assetID].spriteOffset = elems->textFont; - gMenuImages[elems->t.assetID].z_rotation = elems->details.background.backgroundRed; - gMenuImages[elems->t.assetID].x_rotation = elems->details.background.backgroundGreen; - gMenuImages[elems->t.assetID].y_rotation = elems->details.background.backgroundBlue; - gMenuImages[elems->t.assetID].scale = elems->details.background.backgroundAlpha / 256.0f; + gMenuImages[elems->t.assetID].trans.rotation.z = elems->details.background.backgroundRed; + gMenuImages[elems->t.assetID].trans.rotation.y = elems->details.background.backgroundGreen; + gMenuImages[elems->t.assetID].trans.rotation.x = elems->details.background.backgroundBlue; + gMenuImages[elems->t.assetID].trans.scale = elems->details.background.backgroundAlpha / 256.0f; sMenuGuiColourR = elems->filterRed; sMenuGuiColourG = elems->filterGreen; sMenuGuiColourB = elems->filterBlue; @@ -3226,7 +3225,7 @@ void func_80083098(f32 updateRateF) { introCharData = &gTitleCinematicText[gOpeningNameID]; #if REGION == REGION_JP - text2 = D_800E142C_E202C[gOpeningNameID]; + text2 = gTitleCinematicTextJpn[gOpeningNameID]; #endif D_801268D8 += updateRateF; set_text_font(ASSET_FONTS_BIGFONT); @@ -3240,7 +3239,8 @@ void func_80083098(f32 updateRateF) { draw_text(&sMenuCurrDisplayList, D_80126878[i].x, D_80126878[i].y, D_80126878[i].text, ALIGN_MIDDLE_CENTER); #if REGION == REGION_JP set_text_font(ASSET_FONTS_FUNFONT); - draw_text(&sMenuCurrDisplayList, D_80126878[i].x, D_80126878[i].y - 24, D_80126878[i].text2, ALIGN_MIDDLE_CENTER); + draw_text(&sMenuCurrDisplayList, D_80126878[i].x, D_80126878[i].y - 24, D_80126878[i].text2, + ALIGN_MIDDLE_CENTER); set_text_font(ASSET_FONTS_BIGFONT); #endif D_80126878[i].colourIndex++; @@ -3810,7 +3810,7 @@ void menu_audio_options_init(void) { gSoundOptionMask = NULL; gOpacityDecayTimer = -1; menu_assetgroup_load(gOptionMenuTextures); - menu_imagegroup_load(&gOptionMenuTextures[6]); + menu_imagegroup_load(gOptionMenuImageIndices); menu_init_arrow_textures(); transition_begin(&sMenuTransitionFadeOut); func_8007FFEC(2); @@ -4297,17 +4297,17 @@ void savemenu_render_element(SaveFileData *file, s32 x, s32 y) { } sprite_anim_off(TRUE); offsetY = (i - y); - gMenuImages[2].y = offsetY - 49; - gMenuImages[spriteID].y = offsetY - 24; + gMenuImages[2].trans.y_position = offsetY - 49; + gMenuImages[spriteID].trans.y_position = offsetY - 24; sprite_opaque(0); - gMenuImages[2].x = x - (133 - SAVE_MENU_SPRITE_OFFSET); + gMenuImages[2].trans.x_position = x - (133 - SAVE_MENU_SPRITE_OFFSET); gMenuImages[2].spriteOffset = firstDigit; menu_element_render(2); - gMenuImages[2].x = x - (125 - SAVE_MENU_SPRITE_OFFSET); + gMenuImages[2].trans.x_position = x - (125 - SAVE_MENU_SPRITE_OFFSET); gMenuImages[2].spriteOffset = secondDigit; menu_element_render(2); sprite_opaque(1); - gMenuImages[spriteID].x = x - (128 - SAVE_MENU_SPRITE_OFFSET); + gMenuImages[spriteID].trans.x_position = x - (128 - SAVE_MENU_SPRITE_OFFSET); menu_element_render(spriteID); sprite_anim_off(FALSE); } @@ -7552,16 +7552,16 @@ void fileselect_render_element(s32 imageID, s32 xOffset, s32 yOffset, s32 red, s sMenuGuiColourG = green; sMenuGuiColourB = blue; sMenuGuiOpacity = opacity; - gMenuImages[imageID].x = xOffset - 159; - gMenuImages[imageID].y = 119 - yOffset; + gMenuImages[imageID].trans.x_position = xOffset - 159; + gMenuImages[imageID].trans.y_position = 119 - yOffset; menu_element_render(imageID); // And this then draws it again, with colour sMenuGuiColourR = tempRed; sMenuGuiColourG = tempGreen; sMenuGuiColourB = tempBlue; sMenuGuiOpacity = tempOpacity; - gMenuImages[imageID].x = xOffset - 161; - gMenuImages[imageID].y = 121 - yOffset; + gMenuImages[imageID].trans.x_position = xOffset - 161; + gMenuImages[imageID].trans.y_position = 121 - yOffset; menu_element_render(imageID); } @@ -8761,8 +8761,8 @@ void trackmenu_render_2D(s32 x, s32 y, char *hubName, char *trackName, s32 rectO rendermode_reset(&sMenuCurrDisplayList); } } - gMenuImages[imageId].x = x; - gMenuImages[imageId].y = y; + gMenuImages[imageId].trans.x_position = x; + gMenuImages[imageId].trans.y_position = y; if (osTvType == OS_TV_TYPE_PAL) { gTrackSelectWoodFrameHeightScale = 1.2f; offsets = gTracksMenuArrowPositionsPAL; @@ -8986,9 +8986,9 @@ void trackmenu_input(s32 updateRate) { y2 = (((scaleOffset + 20) * gTrackSelectViewPortHalfY) / 40) + centreY; y1 = centreY - (((scaleOffset + 20) * gTrackSelectViewPortHalfY) / 40); viewport_menu_set(0, (centreX - (scaleOffset * 4)) - 80, y1, (scaleOffset * 4) + centreX + 80, y2); - gMenuImages[4].scale = (f32) (sMenuImageProperties[4].scale * (1.0f + ((f32) scaleOffset / 20.0f))); - gMenuImages[6].scale = (f32) (sMenuImageProperties[6].scale * (1.0f + ((f32) scaleOffset / 20.0f))); - gMenuImages[5].scale = (f32) (sMenuImageProperties[5].scale * (1.0f + ((f32) scaleOffset / 20.0f))); + gMenuImages[4].trans.scale = (f32) (sMenuImageProperties[4].trans.scale * (1.0f + ((f32) scaleOffset / 20.0f))); + gMenuImages[6].trans.scale = (f32) (sMenuImageProperties[6].trans.scale * (1.0f + ((f32) scaleOffset / 20.0f))); + gMenuImages[5].trans.scale = (f32) (sMenuImageProperties[5].trans.scale * (1.0f + ((f32) scaleOffset / 20.0f))); } camEnableUserView(0, FALSE); if (bgload_active() == FALSE) { @@ -9126,8 +9126,8 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { } else { sp84 = 4; } - gMenuImages[sp84].x = 0.0f; - gMenuImages[sp84].y = 0.0f; + gMenuImages[sp84].trans.x_position = 0.0f; + gMenuImages[sp84].trans.y_position = 0.0f; if (osTvType == OS_TV_TYPE_PAL) { gTrackSelectWoodFrameHeightScale = 1.2f; } @@ -9330,14 +9330,14 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { rendermode_reset(&sMenuCurrDisplayList); if (gNumberOfActivePlayers <= 2 && !sp74) { // Draw border around vehicle images - gMenuImages[7].y = -52.0f; + gMenuImages[7].trans.y_position = -52.0f; if (gNumberOfActivePlayers == 1) { - gMenuImages[7].x = 21.0f; + gMenuImages[7].trans.x_position = 21.0f; menu_element_render(7); } else { - gMenuImages[7].x = -48.0f; + gMenuImages[7].trans.x_position = -48.0f; menu_element_render(7); - gMenuImages[7].x = 48.0f; + gMenuImages[7].trans.x_position = 48.0f; menu_element_render(7); } } @@ -9377,12 +9377,12 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { sMenuGuiColourB = 0; } } - gMenuImages->x = + gMenuImages[0].trans.x_position = (gTwoPlayerRacerCountMenu.textPos[(temp2 << 1) + 2] + gTwoPlayerRacerCountMenu.x) - 160; - gMenuImages->y = + gMenuImages[0].trans.y_position = (-gTwoPlayerRacerCountMenu.textPos[(temp2 << 1) + 2 + 1] - gTwoPlayerRacerCountMenu.y) + 120; - gMenuImages->spriteOffset = (temp2 << 1) + 2; + gMenuImages[0].spriteOffset = (temp2 << 1) + 2; menu_element_render(0); sMenuGuiColourG = 255; sMenuGuiColourB = 255; @@ -9398,20 +9398,20 @@ void trackmenu_setup_render(UNUSED s32 updateRate) { if (gIsInAdventureTwo) { k = 12; } - gMenuImages[k].y = 42.0f; + gMenuImages[k].trans.y_position = 42.0f; if ((settings->courseFlagsPtr[gTrackIdForPreview] & 2) || (is_adventure_two_unlocked())) { #if VERSION >= VERSION_79 - gMenuImages[k].x = (f32) ((gIsInAdventureTwo * 2) - 128); + gMenuImages[k].trans.x_position = (f32) ((gIsInAdventureTwo * 2) - 128); #else - gMenuImages[k].x = -128.0f; + gMenuImages[k].trans.x_position = -128.0f; #endif menu_element_render(k); } if ((settings->courseFlagsPtr[gTrackIdForPreview] & 4) || (is_adventure_two_unlocked())) { #if VERSION >= VERSION_79 - gMenuImages[k].x = (f32) ((gIsInAdventureTwo * 2) + 120); + gMenuImages[k].trans.x_position = (f32) ((gIsInAdventureTwo * 2) + 120); #else - gMenuImages[k].x = 120.0f; + gMenuImages[k].trans.x_position = 120.0f; #endif menu_element_render(k); } @@ -9491,9 +9491,9 @@ void func_80092188(s32 updateRate) { yOffset = ((xOffset + 20) * gTrackSelectViewPortHalfY) / 40; yOffset2 = yOffset + gTrackSelectViewPortHalfY; viewport_menu_set(0, 80 - (xOffset * 4), gTrackSelectViewPortHalfY - yOffset, (xOffset * 4) + 240, yOffset2); - gMenuImages[4].scale = sMenuImageProperties[4].scale * (1.0f + ((f32) xOffset / 20.0f)); - gMenuImages[5].scale = sMenuImageProperties[5].scale * (1.0f + ((f32) xOffset / 20.0f)); - gMenuImages[6].scale = sMenuImageProperties[6].scale * (1.0f + ((f32) xOffset / 20.0f)); + gMenuImages[4].trans.scale = sMenuImageProperties[4].trans.scale * (1.0f + ((f32) xOffset / 20.0f)); + gMenuImages[5].trans.scale = sMenuImageProperties[5].trans.scale * (1.0f + ((f32) xOffset / 20.0f)); + gMenuImages[6].trans.scale = sMenuImageProperties[6].trans.scale * (1.0f + ((f32) xOffset / 20.0f)); } if (gMenuDelay > 0) { sMenuMusicVolume -= updateRate * 4; @@ -9944,8 +9944,8 @@ void adventuretrack_render(UNUSED s32 updateRate, s32 arg1, s32 arg2) { texrect_draw(&sMenuCurrDisplayList, gRaceSelectionImages[gPlayerSelectVehicle[0] * 3], 149, y, 255, 255, 255, 255); rendermode_reset(&sMenuCurrDisplayList); - gMenuImages[7].x = 21.0f; - gMenuImages[7].y = -52.0f; + gMenuImages[7].trans.x_position = 21.0f; + gMenuImages[7].trans.y_position = -52.0f; menu_element_render(7); if (gMenuStage != ADVENTURESETUP_VEHICLE) { set_text_font(FONT_LARGE); @@ -10619,9 +10619,9 @@ void func_80094D28(UNUSED s32 updateRate) { gTrackSelectViewportY - (((gTrackSelectViewPortHalfY - (gTrackSelectViewPortHalfY / 5)) * var_s0) / 60); var_v0 = (var_s0 * 80) / 60; viewport_menu_set(0, var_v0, temp, SCREEN_WIDTH - var_v0, sp50); - gMenuImages[4].x = 0.0f; - gMenuImages[4].y = gTrackSelectViewPortHalfY - ((var_s2 + sp50) >> 1); - gMenuImages[4].scale = sMenuImageProperties[4].scale * (2.0f - (var_s0 / 60.0f)); + gMenuImages[4].trans.x_position = 0.0f; + gMenuImages[4].trans.y_position = gTrackSelectViewPortHalfY - ((var_s2 + sp50) >> 1); + gMenuImages[4].trans.scale = sMenuImageProperties[4].trans.scale * (2.0f - (var_s0 / 60.0f)); break; case 2: for (i = 0; i < 3; i++) { @@ -10878,9 +10878,9 @@ s32 menu_postrace(Gfx **dList, MatrixS **matrices, Vertex **vertices, s32 update if (gPostRaceTimer > 60 || buttonsPressed & (A_BUTTON | START_BUTTON)) { viewport_menu_set(0, 80, gTrackSelectViewPortHalfY - ((gTrackSelectViewPortHalfY * 4) / 5), SCREEN_HEIGHT, (gTrackSelectViewPortHalfY / 5) + gTrackSelectViewPortHalfY); - gMenuImages[4].x = 0.0f; - gMenuImages[4].y = 36.0f; - gMenuImages[4].scale = sMenuImageProperties[4].scale; + gMenuImages[4].trans.x_position = 0.0f; + gMenuImages[4].trans.y_position = 36.0f; + gMenuImages[4].trans.scale = sMenuImageProperties[4].trans.scale; if (get_map_race_type(settings->courseId) & RACETYPE_CHALLENGE) { gMenuStage = POSTRACE_STAGE_OPTIONS; } else if (!settings->display_times) { @@ -11320,22 +11320,22 @@ void results_render(UNUSED s32 updateRate, f32 opacity) { // I'm 99% sure these need to be gMenuImages[0] // Changing it to gMenuImages[spA0] or gMenuImages[i] makes the score worse. - gMenuImages[0].y = (SCREEN_HEIGHT_HALF - y2); + gMenuImages[0].trans.y_position = (SCREEN_HEIGHT_HALF - y2); if (hundredths > 0) { - gMenuImages[0].x = (x2 - 172); + gMenuImages[0].trans.x_position = (x2 - 172); gMenuImages[0].spriteOffset = hundredths; menu_element_render(0); - gMenuImages[0].x += 12.0f; + gMenuImages[0].trans.x_position += 12.0f; gMenuImages[0].spriteOffset = tens; menu_element_render(0); - gMenuImages[0].x += 12.0f; + gMenuImages[0].trans.x_position += 12.0f; } else if (tens > 0) { - gMenuImages[0].x = (x2 - 166); + gMenuImages[0].trans.x_position = (x2 - 166); gMenuImages[0].spriteOffset = tens; menu_element_render(0); - gMenuImages[0].x += 12.0f; + gMenuImages[0].trans.x_position += 12.0f; } else { - gMenuImages[0].x = (x2 - 160); + gMenuImages[0].trans.x_position = (x2 - 160); } gMenuImages[0].spriteOffset = time; menu_element_render(0); @@ -12653,9 +12653,9 @@ void ghostmenu_render(UNUSED s32 updateRate) { texrect_draw_scaled(&sMenuCurrDisplayList, vehicleSelectTex, (gGhostDataElementPositions[4] + 40), (gGhostDataElementPositions[5] + y), 0.625f, 0.625f, COLOUR_RGBA32(255, 255, 255, 255), 0); rendermode_reset(&sMenuCurrDisplayList); - gMenuImages[7].x = (gGhostDataElementPositions[6] - SCREEN_HEIGHT_HALF); - gMenuImages[7].y = ((-gGhostDataElementPositions[7] - y) + heightAdjust + SCREEN_HEIGHT_HALF); - gMenuImages[7].scale = 0.075f; + gMenuImages[7].trans.x_position = (gGhostDataElementPositions[6] - SCREEN_HEIGHT_HALF); + gMenuImages[7].trans.y_position = ((-gGhostDataElementPositions[7] - y) + heightAdjust + SCREEN_HEIGHT_HALF); + gMenuImages[7].trans.scale = 0.075f; menu_element_render(7); sMenuGuiOpacity = 128; // Timestamp Shadow gets drawn first @@ -13792,14 +13792,14 @@ void menu_image_load(s32 imageID) { gMenuImages = mempool_alloc_safe(sizeof(MenuAsset) * 18, COLOUR_TAG_RED); } - gMenuImages[imageID].y_rotation = sMenuImageProperties[imageID].y_rotation; - gMenuImages[imageID].x_rotation = sMenuImageProperties[imageID].x_rotation; - gMenuImages[imageID].z_rotation = sMenuImageProperties[imageID].z_rotation; - gMenuImages[imageID].spriteID = sMenuImageProperties[imageID].spriteID; - gMenuImages[imageID].x = sMenuImageProperties[imageID].x; - gMenuImages[imageID].y = sMenuImageProperties[imageID].y; - gMenuImages[imageID].z = sMenuImageProperties[imageID].z; - gMenuImages[imageID].scale = sMenuImageProperties[imageID].scale; + gMenuImages[imageID].trans.rotation.x = sMenuImageProperties[imageID].trans.rotation.x; + gMenuImages[imageID].trans.rotation.y = sMenuImageProperties[imageID].trans.rotation.y; + gMenuImages[imageID].trans.rotation.z = sMenuImageProperties[imageID].trans.rotation.z; + gMenuImages[imageID].trans.spriteID = sMenuImageProperties[imageID].trans.spriteID; + gMenuImages[imageID].trans.x_position = sMenuImageProperties[imageID].trans.x_position; + gMenuImages[imageID].trans.y_position = sMenuImageProperties[imageID].trans.y_position; + gMenuImages[imageID].trans.z_position = sMenuImageProperties[imageID].trans.z_position; + gMenuImages[imageID].trans.scale = sMenuImageProperties[imageID].trans.scale; gMenuImages[imageID].spriteOffset = sMenuImageProperties[imageID].spriteOffset; gMenuImages[imageID].unk1A = get_random_number_from_range(0, 0xFFFF); gMenuImages[imageID].unk1B = get_random_number_from_range(0, 0xFFFF); @@ -13823,19 +13823,20 @@ void menu_element_render(s32 elementID) { Sprite *sprite; ObjectModel **model; - if (gMenuAssets[gMenuImages[elementID].spriteID] != NULL) { - if (((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_TEXTURE) != ASSET_MASK_TEXTURE) { - if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_OBJECT) { + if (gMenuAssets[gMenuImages[elementID].trans.spriteID] != NULL) { + if (((*gAssetsMenuElementIds)[gMenuImages[elementID].trans.spriteID] & ASSET_MASK_TEXTURE) != + ASSET_MASK_TEXTURE) { + if ((*gAssetsMenuElementIds)[gMenuImages[elementID].trans.spriteID] & ASSET_MASK_OBJECT) { if (0) {} // Fakematch - object = (Object *) gMenuAssets[gMenuImages[elementID].spriteID]; + object = (Object *) gMenuAssets[gMenuImages[elementID].trans.spriteID]; asset = (MenuAsset *) &gMenuImages[elementID]; - object->segment.trans.rotation.y_rotation = asset->y_rotation; - object->segment.trans.rotation.x_rotation = asset->x_rotation; - object->segment.trans.rotation.z_rotation = asset->z_rotation; - object->segment.trans.x_position = asset->x; - object->segment.trans.y_position = asset->y; - object->segment.trans.z_position = asset->z; - object->segment.trans.scale = asset->scale; + object->segment.trans.rotation.y_rotation = asset->trans.rotation.y_rotation; + object->segment.trans.rotation.x_rotation = asset->trans.rotation.x_rotation; + object->segment.trans.rotation.z_rotation = asset->trans.rotation.z_rotation; + object->segment.trans.x_position = asset->trans.x_position; + object->segment.trans.y_position = asset->trans.y_position; + object->segment.trans.z_position = asset->trans.z_position; + object->segment.trans.scale = asset->trans.scale; if (gMenuDisableObjAnim == FALSE) { object->segment.animFrame = asset->unk1D; object->segment.object.modelIndex = asset->spriteOffset; @@ -13843,8 +13844,8 @@ void menu_element_render(s32 elementID) { object->segment.object.opacity = sMenuGuiOpacity; render_object(&sMenuCurrDisplayList, &sMenuCurrHudMat, &sMenuCurrHudVerts, object); } else { - if ((*gAssetsMenuElementIds)[gMenuImages[elementID].spriteID] & ASSET_MASK_SPRITE) { - sprite = (Sprite *) gMenuAssets[gMenuImages[elementID].spriteID]; + if ((*gAssetsMenuElementIds)[gMenuImages[elementID].trans.spriteID] & ASSET_MASK_SPRITE) { + sprite = (Sprite *) gMenuAssets[gMenuImages[elementID].trans.spriteID]; gDPSetPrimColor(sMenuCurrDisplayList++, 0, 0, sMenuGuiColourR, sMenuGuiColourG, sMenuGuiColourB, sMenuGuiOpacity); gDPSetEnvColor(sMenuCurrDisplayList++, 255, 255, 255, 0); @@ -13858,10 +13859,9 @@ void menu_element_render(s32 elementID) { gDPSetPrimColor(sMenuCurrDisplayList++, 0, 0, 255, 255, 255, 255); }; gDPSetEnvColor(sMenuCurrDisplayList++, 255, 255, 255, 0); - cam_push_model_mtx(&sMenuCurrDisplayList, &sMenuCurrHudMat, - (ObjectTransform *) (&gMenuImages[elementID]), - gTrackSelectWoodFrameHeightScale, 0); - model = ((ObjectModel **) gMenuAssets[gMenuImages[elementID].spriteID]); + cam_push_model_mtx(&sMenuCurrDisplayList, &sMenuCurrHudMat, &gMenuImages[elementID].trans, + gTrackSelectWoodFrameHeightScale, 0); + model = ((ObjectModel **) gMenuAssets[gMenuImages[elementID].trans.spriteID]); render_track_selection_viewport_border(*model); apply_matrix_from_stack(&sMenuCurrDisplayList); if (sMenuGuiOpacity < 255) { @@ -14589,38 +14589,38 @@ void dialogue_tt_gamestatus(void) { numOfItem = 9; } tempX = -74; - gMenuImages[numOfItem].x = tempX; - gMenuImages[numOfItem].y = 65 - y; + gMenuImages[numOfItem].trans.x_position = tempX; + gMenuImages[numOfItem].trans.y_position = 65 - y; menu_element_render(numOfItem); sprite_opaque(FALSE); tempX = -29; - gMenuImages[0].x = tempX; - gMenuImages[0].y = 98 - y; - gMenuImages[0].x -= 6.0f; + gMenuImages[0].trans.x_position = tempX; + gMenuImages[0].trans.y_position = 98 - y; + gMenuImages[0].trans.x_position -= 6.0f; flag = settings->balloonsPtr[0] / 10; // settings->balloonsPtr[0] is the total balloon count. numBalloonsTensDigit = flag; if (numBalloonsTensDigit) { gMenuImages[0].spriteOffset = numBalloonsTensDigit; menu_element_render(0); - gMenuImages[0].x += 12.0f; + gMenuImages[0].trans.x_position += 12.0f; } gMenuImages[0].spriteOffset = settings->balloonsPtr[0] % 10; menu_element_render(0); tempX = -49; - gMenuImages[10].x = tempX; - gMenuImages[10].y = 98 - y; + gMenuImages[10].trans.x_position = tempX; + gMenuImages[10].trans.y_position = 98 - y; menu_element_render(10); sprite_opaque(TRUE); y += 50; tempX = -89; - gMenuImages[15].x = tempX; - gMenuImages[15].y = 95 - y; + gMenuImages[15].trans.x_position = tempX; + gMenuImages[15].trans.y_position = 95 - y; gMenuImages[15].spriteOffset = settings->wizpigAmulet; menu_element_render(15); tempX = -29; - gMenuImages[16].x = tempX; - gMenuImages[16].y = 95 - y; + gMenuImages[16].trans.x_position = tempX; + gMenuImages[16].trans.y_position = 95 - y; gMenuImages[16].spriteOffset = settings->ttAmulet; menu_element_render(16); @@ -14631,8 +14631,8 @@ void dialogue_tt_gamestatus(void) { } y += 50; for (x = 20, i = 0; i < 4; i++, x += 30) { - gMenuImages[13].x = (x - 124); - gMenuImages[13].y = (95 - y); + gMenuImages[13].trans.x_position = (x - 124); + gMenuImages[13].trans.y_position = (95 - y); if (i < numOfItem) { gMenuImages[13].spriteOffset = 1; } else { @@ -14647,8 +14647,8 @@ void dialogue_tt_gamestatus(void) { } y += 45; for (x = 20, i = 0; i < 4; i++, x += 30) { - gMenuImages[14].x = (x - 124); - gMenuImages[14].y = (95 - (y)); + gMenuImages[14].trans.x_position = (x - 124); + gMenuImages[14].trans.y_position = (95 - (y)); if (i < numOfItem) { gMenuImages[14].spriteOffset = 1; } else { diff --git a/src/menu.h b/src/menu.h index 4ad3476e..a801cb54 100644 --- a/src/menu.h +++ b/src/menu.h @@ -270,14 +270,7 @@ typedef enum TitleDemoIndex { /* Size: 0x20 bytes */ // So this is looking to be a struct for menu images. typedef struct MenuAsset { - s16 y_rotation; - s16 x_rotation; - s16 z_rotation; - s16 spriteID; - f32 scale; - f32 x; - f32 y; - f32 z; + ObjectTransform trans; s16 spriteOffset; s8 unk1A; s8 unk1B; diff --git a/src/object_functions.c b/src/object_functions.c index f24f52f4..814f9efd 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -1788,7 +1788,7 @@ void obj_loop_animator(Object *obj, s32 updateRate) { } void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2) { - Object_Animation *obj64; + Object *obj64; s8 tempOrderIndex; f32 scalef; @@ -1839,11 +1839,11 @@ void obj_init_animation(Object *obj, LevelObjectEntry_Animation *entry, s32 arg2 (entry->objectIdToSpawn != -1)) { func_8001F23C(obj, entry); } - obj64 = &obj->unk64->animation; - if (obj->unk64 != 0) { - obj_init_animcamera(obj, (Object *) obj64); - if (entry->order != 0 || obj64->unk4A != entry->objectIdToSpawn) { - free_object((Object *) obj64); + obj64 = (Object *) &obj->unk64->obj; + if (obj->unk64 != NULL) { + obj_init_animcamera(obj, obj64); + if (entry->order != 0 || obj64->objectID != entry->objectIdToSpawn) { + free_object(obj64); obj->unk64 = NULL; } } diff --git a/src/objects.c b/src/objects.c index 48d1446f..0e5b6385 100644 --- a/src/objects.c +++ b/src/objects.c @@ -372,7 +372,7 @@ void racerfx_alloc(s32 numberOfVertices, s32 numberOfTriangles) { gBoostEffectObjects[i]->properties.common.unk4 = 0; miscAsset20[i].unk70 = 0; miscAsset20[i].unk74 = 0.0f; - miscAsset20[i].unk78 = (Sprite *) tex_load_sprite(miscAsset20[i].unk6C, 0); + miscAsset20[i].unk78 = tex_load_sprite(miscAsset20[i].unk6C, 0); miscAsset20[i].unk7C = load_texture(miscAsset20[i].unk6E); miscAsset20[i].unk72 = get_random_number_from_range(0, 255); miscAsset20[i].unk73 = 0; @@ -387,7 +387,7 @@ void racerfx_alloc(s32 numberOfVertices, s32 numberOfTriangles) { objEntry.common.x = 0; objEntry.common.y = 0; objEntry.common.z = 0; - gShieldEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, OBJECT_SPAWN_NONE); + gShieldEffectObject = spawn_object(&objEntry.common, OBJECT_SPAWN_NONE); for (i = 0; i < NUMBER_OF_CHARACTERS; i++) { gRacerFXData[i].unk0 = 0; gRacerFXData[i].unk1 = get_random_number_from_range(0, 255); @@ -399,7 +399,7 @@ void racerfx_alloc(s32 numberOfVertices, s32 numberOfTriangles) { objEntry.common.x = 0; objEntry.common.y = 0; objEntry.common.z = 0; - gMagnetEffectObject = spawn_object((LevelObjectEntryCommon *) &objEntry, OBJECT_SPAWN_NONE); + gMagnetEffectObject = spawn_object(&objEntry.common, OBJECT_SPAWN_NONE); } /** @@ -445,99 +445,94 @@ void racerfx_free(void) { #pragma GLOBAL_ASM("asm/nonmatchings/objects/func_8000B38C.s") -#ifdef NON_EQUIVALENT void func_8000B38C(Vertex *, Triangle *, ObjectTransform *, f32, f32, s16, TextureHeader *arg6); -void func_8000B750(Object *obj, s32 objId, s32 arg2, s32 arg3, s32 arg4) { - Vec3f sp74; - ObjectTransform sp50; - Object_Boost **temp_v0; - Object **var_t2; - f32 temp_f0; - f32 var_f14; - f32 var_f2; - Object_Boost *temp_t4; - Object_Boost *temp_v1; - Object_Boost_Inner *var_v0; - if (objId == -1) { - objId = gBoostObjOverrideID; +void func_8000B750(Object *racerObj, s32 racerIndex, s32 vehicleIDPrev, s32 boostType, s32 arg4) { + f32 sp74[3]; + f32 temp_f0; + f32 var_f2; + Object_Boost *boostAsset; + ObjectTransform objTrans; + Object_Boost *objBoostRacer; + Object_Boost *objBoostType; + Object_Boost_Inner *boostData; + + if (racerIndex == -1) { + racerIndex = gBoostObjOverrideID; gBoostObjOverrideID--; } if (gBoostObjOverrideID < 0) { gBoostObjOverrideID = 0; } - if (objId >= 0 && objId < 10) { - temp_v0 = get_misc_asset(ASSET_MISC_20); - var_t2 = &gBoostEffectObjects[objId]; - temp_t4 = &temp_v0[(arg3 << 5)]; - temp_v1 = &temp_v0[(objId << 5)]; - if (*var_t2 != NULL) { - switch (arg2) { + if (racerIndex >= 0 && racerIndex < NUMBER_OF_CHARACTERS) { + boostAsset = (Object_Boost *) get_misc_asset(ASSET_MISC_20); + objBoostType = &boostAsset[boostType]; + objBoostRacer = &boostAsset[racerIndex]; + if (gBoostEffectObjects[racerIndex] != NULL) { + switch (vehicleIDPrev) { default: - var_v0 = &temp_v1->unk48; - if (arg2 != 0xD) { - var_v0 = NULL; - } + boostData = NULL; break; - case 0: - var_v0 = &temp_v1->unk0; + case VEHICLE_CAR: + boostData = &objBoostRacer->unk0; break; - case 1: - var_v0 = &temp_v1->unk24; + case VEHICLE_HOVERCRAFT: + boostData = &objBoostRacer->unk24; break; - case 2: - var_v0 = &temp_v1->unk48; + case VEHICLE_PLANE: + boostData = &objBoostRacer->unk48; + break; + case VEHICLE_ROCKET: + boostData = &objBoostRacer->unk48; break; } - if (var_v0 != NULL) { - D_8011B048[objId] = arg2; - D_8011B058[objId] = arg3; - if (temp_v1->unk70 == 2) { - temp_f0 = coss_f(temp_v1->unk72 << 12); - var_f2 = (var_v0->unk14 + (temp_f0 * var_v0->unk18)) * temp_v1->unk74; - var_f14 = (var_v0->unk1C + (temp_f0 * var_v0->unk20)) * temp_v1->unk74; - if ((arg3 & 3) == 1) { + if (boostData != NULL) { + D_8011B048[racerIndex] = vehicleIDPrev; + D_8011B058[racerIndex] = boostType; + if (objBoostRacer->unk70 == 2) { + temp_f0 = coss_f(objBoostRacer->unk72 << 12); + var_f2 = (boostData->unk14 + (temp_f0 * boostData->unk18)) * objBoostRacer->unk74; + temp_f0 = (boostData->unk1C + (temp_f0 * boostData->unk20)) * objBoostRacer->unk74; + if ((boostType & 3) == BOOST_MEDIUM) { var_f2 *= 1.09f; - var_f14 *= 1.09f; + temp_f0 *= 1.09f; } - if ((arg3 & 3) >= 2) { + if ((boostType & 3) >= BOOST_LARGE) { var_f2 *= 1.18f; - var_f14 *= 1.18f; + temp_f0 *= 1.18f; } - sp50.x_position = var_v0->position.x; - sp50.y_position = var_v0->position.y; - sp50.z_position = var_v0->position.z; - sp50.scale = 1.0f; - sp50.rotation.x_rotation = -0x8000; - sp50.rotation.y_rotation = 0; - sp50.rotation.z_rotation = 0; + objTrans.x_position = boostData->position.x; + objTrans.y_position = boostData->position.y; + objTrans.z_position = boostData->position.z; + objTrans.scale = 1.0f; + objTrans.rotation.y_rotation = -0x8000; + objTrans.rotation.x_rotation = 0; + objTrans.rotation.z_rotation = 0; func_8000B38C(&gBoostVerts[gBoostVertFlip][D_8011AFFC], &gBoostTris[gBoostVertFlip][D_8011B004], - &sp50, var_f2, var_f14, (temp_v1->unk72), &temp_t4->unk7C); - (*var_t2)->properties.common.unk4 = (objId << 28) | (D_8011AFFC << 14) | D_8011B004; + &objTrans, var_f2, temp_f0, objBoostRacer->unk72 << 12, objBoostType->unk7C); + gBoostEffectObjects[racerIndex]->properties.boost.unk4 = + (racerIndex << 28) | (D_8011AFFC << 14) | D_8011B004; D_8011AFFC += 9; D_8011B004 += 8; } - (*var_t2)->properties.common.unk0 = (s32) obj; - (*var_t2)->segment.trans.x_position = 0.0f; - (*var_t2)->segment.trans.y_position = 0.0f; - (*var_t2)->segment.trans.z_position = 0.0f; - sp74.x = var_v0->position.x; - sp74.y = var_v0->position.y; - sp74.z = var_v0->position.z; - f32_vec3_apply_object_rotation(&obj->segment.trans, &sp74); + gBoostEffectObjects[racerIndex]->properties.boost.obj = racerObj; + gBoostEffectObjects[racerIndex]->segment.trans.x_position = 0.0f; + gBoostEffectObjects[racerIndex]->segment.trans.y_position = 0.0f; + gBoostEffectObjects[racerIndex]->segment.trans.z_position = 0.0f; + sp74[0] = boostData->position.x; + sp74[1] = boostData->position.y; + sp74[2] = boostData->position.z; + f32_vec3_apply_object_rotation(&racerObj->segment.trans, sp74); ignore_bounds_check(); - move_object(var_t2, sp74.x + obj->segment.trans.x_position, sp74.y + obj->segment.trans.y_position, - sp74.z + obj->segment.trans.z_position); + move_object(gBoostEffectObjects[racerIndex], racerObj->segment.trans.x_position + sp74[0], + racerObj->segment.trans.y_position + sp74[1], racerObj->segment.trans.z_position + sp74[2]); } - if (arg4 != 0) { - D_8011B068[objId] = 0; + if (arg4 != FALSE) { + D_8011B068[racerIndex] = FALSE; } } } } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/objects/func_8000B750.s") -#endif /** * Updates the racer FX object states. @@ -1600,7 +1595,7 @@ void transform_player_vehicle(void) { spawnObj.common.z = gTransformPosZ; spawnObj.unkC = gTransformAngleY; set_taj_status(TAJ_DIALOGUE); - player = spawn_object((LevelObjectEntryCommon *) &spawnObj, 0x10 | 0x1); + player = spawn_object(&spawnObj.common, 0x10 | 0x1); gNumRacers = 1; (*gRacers)[PLAYER_ONE] = player; gRacersByPort[PLAYER_ONE] = player; @@ -2194,15 +2189,15 @@ s32 init_object_shadow(Object *obj, ShadowData *shadow) { obj->shadow = shadow; shadow->texture = NULL; - objHeader = ((ObjectSegment *) obj)->header; + objHeader = obj->segment.header; if (objHeader->shadowGroup) { - shadow->texture = load_texture((s32) ((ObjectHeader *) objHeader)->unk34); - objHeader = ((ObjectSegment *) obj)->header; + shadow->texture = load_texture(objHeader->unk34); + objHeader = obj->segment.header; } shadow->scale = objHeader->shadowScale; shadow->meshStart = -1; D_8011AE50 = shadow->texture; - if (((ObjectSegment *) obj)->header->shadowGroup && shadow->texture == NULL) { + if (obj->segment.header->shadowGroup && shadow->texture == NULL) { return 0; } return sizeof(ShadowData); @@ -2385,7 +2380,7 @@ void obj_update(s32 updateRate) { func_800245B4(-1); gEventStartTimer = gEventCountdown; - if ((gEventCountdown > 0) && (race_starting() != 0)) { + if (gEventCountdown > 0 && race_starting() != FALSE) { gEventCountdown -= updateRate; D_8011ADBC = 0; } else { @@ -2399,9 +2394,9 @@ void obj_update(s32 updateRate) { D_8011AD22[D_8011AD21] = 0; for (j = 0; j < gNumRacers; j++) { racer = &(*gRacers)[j]->unk64->racer; - racer->prev_x_position = (f32) (*gRacers)[j]->segment.trans.x_position; - racer->prev_y_position = (f32) (*gRacers)[j]->segment.trans.y_position; - racer->prev_z_position = (f32) (*gRacers)[j]->segment.trans.z_position; + racer->prev_x_position = (*gRacers)[j]->segment.trans.x_position; + racer->prev_y_position = (*gRacers)[j]->segment.trans.y_position; + racer->prev_z_position = (*gRacers)[j]->segment.trans.z_position; } obj_tick_anims(); process_object_interactions(); @@ -2576,7 +2571,7 @@ void func_80011264(ObjectModel *model, Object *obj) { if (batch[i].textureIndex != TEX_INDEX_NO_TEXTURE) { // Fakematch if (model->textures[batch[i].textureIndex].texture) {} - if ((model->textures[batch[i].textureIndex].texture->numOfTextures) > 0x900) { + if (model->textures[batch[i].textureIndex].texture->numOfTextures > 0x900) { batch[i].unk7 = remaining; } else if (current >= 0) { batch[i].unk7 = current; @@ -2797,7 +2792,7 @@ void render_misc_model(Object *obj, Vertex *verts, u32 numVertices, Triangle *tr if (tex != NULL) { hasTexture = TRUE; } - material_set(&gObjectCurrDisplayList, (TextureHeader *) tex, flags, texOffset); + material_set(&gObjectCurrDisplayList, tex, flags, texOffset); gSPVertexDKR(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(verts), numVertices, 0); gSPPolygon(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(triangles), numTriangles, hasTexture); apply_matrix_from_stack(&gObjectCurrDisplayList); @@ -2853,7 +2848,7 @@ void render_3d_billboard(Object *obj) { s32 hasEnvCol; ObjectTransformExt objTrans; Object *bubbleTrap; - Object_68 *gfxData; + Sprite *gfxData; intensity = 255; hasPrimCol = FALSE; @@ -2930,7 +2925,7 @@ void render_3d_billboard(Object *obj) { objTrans.animFrame = obj->segment.animFrame; objTrans.unk1A = 32; if (bubbleTrap == NULL) { - bubbleTrap = (Object *) obj->unk64->weapon.target; + bubbleTrap = obj->unk64->weapon.target; if (bubbleTrap == NULL) { bubbleTrap = obj; } @@ -2938,8 +2933,8 @@ void render_3d_billboard(Object *obj) { render_bubble_trap(&bubbleTrap->segment.trans, gfxData, (Object *) &objTrans, RENDER_Z_COMPARE | RENDER_SEMI_TRANSPARENT | RENDER_Z_UPDATE); } else { - render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, obj, - (Sprite *) gfxData, flags); + render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, obj, gfxData, + flags); } if (hasPrimCol) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, 255); @@ -2975,7 +2970,7 @@ void render_3d_model(Object *obj) { Object_68 *obj68; Object_Racer *racerObj; ObjectModel *objModel; - Object_68 *something; + Sprite *something; obj68 = obj->unk68[obj->segment.object.modelIndex]; if (obj68 != NULL) { @@ -2995,7 +2990,7 @@ void render_3d_model(Object *obj) { racerObj = NULL; } if (obj68->animUpdateTimer <= 0) { - obj->curVertData = (Vertex *) obj68->vertices[obj68->animationTaskNum]; + obj->curVertData = obj68->vertices[obj68->animationTaskNum]; if (obj68->modelType == MODELTYPE_ANIMATED) { obj_animate(obj); } @@ -3008,7 +3003,7 @@ void render_3d_model(Object *obj) { if (cam_get_viewport_layout() != VIEWPORT_LAYOUT_1_PLAYER) { flags = FALSE; } - obj->curVertData = (Vertex *) obj68->vertices[obj68->animationTaskNum]; + obj->curVertData = obj68->vertices[obj68->animationTaskNum]; if (obj->behaviorId == BHV_UNK_3F) { // 63 = stopwatchicon, stopwatchhand obj_shade_fancy(objModel, obj, 0, gCurrentLightIntensity); } else if (flags) { @@ -3025,7 +3020,7 @@ void render_3d_model(Object *obj) { obj68->animUpdateTimer = 1; } } - obj->curVertData = (Vertex *) obj68->vertices[obj68->animationTaskNum]; + obj->curVertData = obj68->vertices[obj68->animationTaskNum]; if (obj->behaviorId == BHV_DOOR) { func_80011264(objModel, obj); } @@ -3089,7 +3084,7 @@ void render_3d_model(Object *obj) { obj60_unk0 = 0; } for (i = 0; i < obj60_unk0; i++) { - loopObj = ((Object **) obj->unk60)[i + 1]; + loopObj = obj->unk60->unk4[i]; if (!(loopObj->segment.trans.flags & OBJ_FLAGS_INVISIBLE)) { index = obj->unk60->unk2C[i]; if (index >= 0 && index < objModel->unk18) { @@ -3129,7 +3124,7 @@ void render_3d_model(Object *obj) { } loopObj->properties.common.unk0 = render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, - &gObjectCurrVertexList, loopObj, (Sprite *) something, flags); + &gObjectCurrVertexList, loopObj, something, flags); if (var_v0_2) { gSPSelectMatrixDKR(gObjectCurrDisplayList++, G_MTX_DKR_INDEX_0); func_80012CE8(&gObjectCurrDisplayList); @@ -3158,7 +3153,7 @@ void render_3d_model(Object *obj) { loopObj->segment.trans.z_position += (vtxZ - loopObj->segment.trans.z_position) * 0.25; if (loopObj->segment.header->modelType == OBJECT_MODEL_TYPE_SPRITE_BILLBOARD) { render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, - loopObj, (Sprite *) something, flags); + loopObj, something, flags); } } } @@ -3476,7 +3471,7 @@ void func_800135B8(Object *boostObj) { s32 hasTexture; s32 idx; - idx = (boostObj->properties.common.unk4 >> 28) & 0xF; + idx = (boostObj->properties.boost.unk4 >> 28) & 0xF; boost = &boostObj->unk64->boost; switch (D_8011B048[idx]) { case 0: @@ -3491,10 +3486,10 @@ void func_800135B8(Object *boostObj) { } asset = (Object_Boost *) get_misc_asset(ASSET_MISC_20); asset = &asset[D_8011B058[idx]]; - object_do_player_tumble((Object *) boostObj->properties.common.unk0); - cam_push_model_mtx(&gObjectCurrDisplayList, &gObjectCurrMatrix, - (ObjectTransform *) boostObj->properties.common.unk0, 1.0f, 0.0f); - object_undo_player_tumble((Object *) boostObj->properties.common.unk0); + object_do_player_tumble(boostObj->properties.boost.obj); + cam_push_model_mtx(&gObjectCurrDisplayList, &gObjectCurrMatrix, &boostObj->properties.boost.obj->segment.trans, + 1.0f, 0.0f); + object_undo_player_tumble(boostObj->properties.boost.obj); objTransform.trans.x_position = boostData->position.x; objTransform.trans.y_position = boostData->position.y; objTransform.trans.z_position = boostData->position.z; @@ -3523,8 +3518,8 @@ void func_800135B8(Object *boostObj) { hasTexture = FALSE; } - vtx = &gBoostVerts[gBoostVertFlip][(boostObj->properties.common.unk4 >> 14) & 0x3FFF]; - tri = &gBoostTris[gBoostVertFlip][boostObj->properties.common.unk4 & 0x3FFF]; + vtx = &gBoostVerts[gBoostVertFlip][(boostObj->properties.boost.unk4 >> 14) & 0x3FFF]; + tri = &gBoostTris[gBoostVertFlip][boostObj->properties.boost.unk4 & 0x3FFF]; gSPVertexDKR(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(vtx), 9, 0); gSPPolygon(gObjectCurrDisplayList++, OS_K0_TO_PHYSICAL(tri), 8, hasTexture); } @@ -3534,7 +3529,7 @@ void func_800135B8(Object *boostObj) { /** * Render the bubble trap weapon. */ -void render_bubble_trap(ObjectTransform *trans, Object_68 *gfxData, Object *obj, s32 flags) { +void render_bubble_trap(ObjectTransform *trans, Sprite *gfxData, Object *obj, s32 flags) { f32 x; f32 y; f32 z; @@ -3559,8 +3554,7 @@ void render_bubble_trap(ObjectTransform *trans, Object_68 *gfxData, Object *obj, obj->segment.trans.x_position += x; obj->segment.trans.y_position += y; obj->segment.trans.z_position += z; - render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, obj, - (Sprite *) gfxData, flags); + render_sprite_billboard(&gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, obj, gfxData, flags); } /** @@ -3616,7 +3610,7 @@ void render_racer_shield(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o shear *= scale; gfxData = gShieldEffectObject->unk68[shieldType]; mdl = gfxData->objModel; - gShieldEffectObject->curVertData = (Vertex *) gfxData->vertices[gfxData->animationTaskNum]; + gShieldEffectObject->curVertData = gfxData->vertices[gfxData->animationTaskNum]; gDPSetEnvColor(gObjectCurrDisplayList++, 255, 255, 255, 0); if (racer->shieldTimer < 64) { gDPSetPrimColor(gObjectCurrDisplayList++, 0, 0, 255, 255, 255, racer->shieldTimer * 4); @@ -3680,7 +3674,7 @@ void render_racer_magnet(Gfx **dList, MatrixS **mtx, Vertex **vtxList, Object *o gMagnetEffectObject->segment.trans.rotation.z_rotation = 0; gfxData = *gMagnetEffectObject->unk68; mdl = gfxData->objModel; - gMagnetEffectObject->curVertData = (Vertex *) gfxData->vertices[gfxData->animationTaskNum]; + gMagnetEffectObject->curVertData = gfxData->vertices[gfxData->animationTaskNum]; opacity = ((gRacerFXData[racerIndex].unk1 * 8) & 0x7F) + 0x80; gfx_init_basic_xlu(&gObjectCurrDisplayList, DRAW_BASIC_2CYCLE, COLOUR_RGBA32(255, 255, 255, opacity), gMagnetColours[racer->magnetModelID]); @@ -4241,12 +4235,12 @@ void func_80016748(Object *obj0, Object *obj1) { if (!((objModel->unk3C + 50.0) < sqrtf((xDiff * xDiff) + (yDiff * yDiff) + (zDiff * zDiff)))) { obj0Interact = obj0->interactObj; obj1Interact = obj1->interactObj; - object_transform_to_matrix((float (*)[4]) obj1TransformMtx, &obj1->segment.trans); + object_transform_to_matrix((float(*)[4]) obj1TransformMtx, &obj1->segment.trans); for (i = 0; i < objModel->unk20; i += 2) { xDiff = obj1->curVertData[objModel->unk1C[i]].x; yDiff = obj1->curVertData[objModel->unk1C[i]].y; zDiff = obj1->curVertData[objModel->unk1C[i]].z; - guMtxXFMF((float (*)[4]) obj1TransformMtx, xDiff, yDiff, zDiff, &xDiff, &yDiff, &zDiff); + guMtxXFMF((float(*)[4]) obj1TransformMtx, xDiff, yDiff, zDiff, &xDiff, &yDiff, &zDiff); temp = (((f32) objModel->unk1C[i + 1] / 64) * obj1->segment.trans.scale) * 50.0; xDiff -= obj0->segment.trans.x_position; yDiff -= obj0->segment.trans.y_position; @@ -4413,7 +4407,7 @@ void func_8001709C(Object *obj) { sp78.x_position = -obj->segment.trans.x_position; sp78.y_position = -obj->segment.trans.y_position; sp78.z_position = -obj->segment.trans.z_position; - object_inverse_transform_to_matrix((float (*)[4]) sp6C, (ObjectTransform *) &sp78); + object_inverse_transform_to_matrix((float(*)[4]) sp6C, &sp78); inverseScale = 1.0 / obj->segment.trans.scale; i = 0; while (i < 16) { @@ -4432,7 +4426,7 @@ void func_8001709C(Object *obj) { sp78.x_position = obj->segment.trans.x_position; sp78.y_position = obj->segment.trans.y_position; sp78.z_position = obj->segment.trans.z_position; - object_transform_to_matrix(obj5C->_matrices[(obj5C->unk104 + 2) << 1], (ObjectTransform *) &sp78); + object_transform_to_matrix(obj5C->_matrices[(obj5C->unk104 + 2) << 1], &sp78); obj5C->unk100 = NULL; } @@ -5505,7 +5499,7 @@ s32 ainode_find_nearest(f32 diffX, f32 diffY, f32 diffZ, s32 useElevation) { dist = 50000.0; result = 0xFF; for (numSteps = 0; numSteps != AINODE_COUNT; numSteps++) { - segment = (ObjectSegment *) (*gAINodes)[numSteps]; + segment = &(*gAINodes)[numSteps]->segment; if (segment) { levelObj = &((segment->level_entry)->aiNode); findDist = TRUE; @@ -6184,7 +6178,7 @@ void func_8001F23C(Object *obj, LevelObjectEntry_Animation *animEntry) { NEW_OBJECT_ENTRY(newObjEntry, animEntry->objectIdToSpawn, 8, animEntry->common.x, animEntry->common.y, animEntry->common.z); - obj->unk64 = (Object_64 *) spawn_object((LevelObjectEntryCommon *) &newObjEntry, 1); + obj->unk64 = (Object_64 *) spawn_object(&newObjEntry, 1); newObj = (Object *) obj->unk64; // (newObj->behaviorId == BHV_DINO_WHALE) is Dinosaur1, Dinosaur2, Dinosaur3, Whale, and Dinoisle if (obj->unk64 != NULL && newObj->behaviorId == BHV_DINO_WHALE && gTimeTrialEnabled) { @@ -6265,7 +6259,7 @@ void func_80021104(Object *obj, Object_Animation *animObj, LevelObjectEntry_Anim Camera *camera; ObjectTransform *animObjTrans; - animObjTrans = (ObjectTransform *) animObj->unk1C; + animObjTrans = &animObj->unk1C->segment.trans; if (obj->behaviorId == BHV_CAMERA_ANIMATION) { animObj->unk44 = D_8011AD3E; D_8011AD3E++; diff --git a/src/objects.h b/src/objects.h index f05ebe35..51aff5f5 100644 --- a/src/objects.h +++ b/src/objects.h @@ -463,7 +463,7 @@ void render_3d_misc(Object *obj); Object *spectate_nearest(Object *obj, s32 *cameraId); s32 init_object_shadow(Object *obj, ShadowData *shadow); s32 render_mesh(ObjectModel *objModel, Object *obj, s32 startIndex, s32 flags, s32 someBool); -void render_bubble_trap(ObjectTransform *trans, Object_68 *gfxData, Object *obj, s32 flags); +void render_bubble_trap(ObjectTransform *trans, Sprite *gfxData, Object *obj, s32 flags); void gParticlePtrList_flush(void); s32 init_object_shading(Object *obj, ShadeProperties *shadeData); ObjectHeader *load_object_header(s32 index); @@ -520,7 +520,7 @@ void decrypt_magic_codes(s32 *data, s32 length); s32 get_first_active_object(s32 *); Object *spawn_object(LevelObjectEntryCommon *entry, s32); s32 func_8001F460(Object*, s32, Object*); -void func_8000B750(Object *obj, s32 objId, s32 arg2, s32 arg3, s32 arg4); +void func_8000B750(Object *racerObj, s32 racerIndex, s32 vehicleIDPrev, s32 boostType, s32 arg4); void func_80018CE0(Object* obj, f32 xPos, f32 yPos, f32 zPos, s32 updateRate); s32 func_800185E4(s8, Object* obj, f32 xPos, f32 yPos, f32 zPos, f32* checkpointDistance, u8*); void func_80011134(Object *, s32); diff --git a/src/printf.c b/src/printf.c index 4aecec4c..65d47c68 100644 --- a/src/printf.c +++ b/src/printf.c @@ -8,7 +8,7 @@ /************ .data ************/ -s32 D_800E2EF0 = FALSE; +s32 gSprintfSpacingCode = FALSE; // Used to determine if vsprintf should use fixed width mode or not // Char width is (v - u) + 1 TexFontCoords gDebugFontCoords[3][32] = { @@ -158,7 +158,7 @@ u16 gDebugTextX; u16 gDebugTextY; u16 D_80127CB0; u16 D_80127CB2; -s32 D_80127CB4; +s32 gDebugFixedWidthMode; s32 gDebugTextOn; s32 gDebugBoundsX1; s32 gDebugBoundsX2; @@ -189,12 +189,17 @@ char *_itoa(u64 n, char *outBuffer, u32 radix, s32 useUpperCase) { return buffer; } -// Official Name: sprintfSetSpacingCodes -void func_800B4A08(s32 setting) { - D_800E2EF0 = setting; +/** + * Used to determine if vsprintf should use fixed width mode or not + * Official Name: sprintfSetSpacingCodes + */ +void sprintfSetSpacingCodes(s32 setting) { + gSprintfSpacingCode = setting; } -/* Official name: sprintf */ +/** + * Official name: sprintf + */ UNUSED int sprintf(char *s, const char *format, ...) { s32 ret; va_list args; @@ -227,9 +232,9 @@ s32 render_printf(const char *format, ...) { stubbed_printf("*** diPrintf Error *** ---> Out of string space. (Print less text!)\n"); return -1; } - func_800B4A08(TRUE); + sprintfSetSpacingCodes(TRUE); written = vsprintf(gDebugPrintBufferEnd, format, args); - func_800B4A08(FALSE); + sprintfSetSpacingCodes(FALSE); if (written > 0) { gDebugPrintBufferEnd = &gDebugPrintBufferEnd[written] + 1; } @@ -255,7 +260,7 @@ void debug_text_print(Gfx **dList) { buffer = (char *) gDebugPrintBufferStart; debug_text_origin(); gDebugFontTexture = -1; - D_80127CB4 = 0; + gDebugFixedWidthMode = FALSE; D_80127CB0 = gDebugTextX; D_80127CB2 = gDebugTextY; while ((s32) buffer != (s32) gDebugPrintBufferEnd) { @@ -266,7 +271,7 @@ void debug_text_print(Gfx **dList) { buffer = (char *) gDebugPrintBufferStart; debug_text_origin(); gDebugFontTexture = -1; - D_80127CB4 = 0; + gDebugFixedWidthMode = FALSE; while ((s32) buffer != (s32) gDebugPrintBufferEnd) { gDebugTextOn = TRUE; buffer += func_800B653C(dList, buffer); @@ -318,9 +323,9 @@ UNUSED s32 debug_text_width(const char *format, ...) { va_start(args, format); stringLength = 0; - func_800B4A08(TRUE); + sprintfSetSpacingCodes(TRUE); vsprintf(s, format, args); - func_800B4A08(FALSE); + sprintfSetSpacingCodes(FALSE); for (ch = (u8 *) &s[0]; *ch != '\0'; ch++) { pad = *ch; if (*ch != (0, '\n')) { @@ -328,18 +333,18 @@ UNUSED s32 debug_text_width(const char *format, ...) { stringLength += 6; if (1) {} } else { - if (*ch < '@') { + if (*ch < 0x40) { // Character is a symbol or number and not a letter - gDebugFontTexture = 0; - *ch -= '!'; - } else if (*ch < '`') { + gDebugFontTexture = ASSET_TEX2D_SMALLFONT_0; + *ch -= 0x21; + } else if (*ch < 0x60) { // Character is a upper case letter - gDebugFontTexture = 1; - *ch -= '@'; + gDebugFontTexture = ASSET_TEX2D_SMALLFONT_1; + *ch -= 0x40; } else if (*ch <= 0x7F) { // Character is a lower case letter - gDebugFontTexture = 2; - *ch -= '`'; + gDebugFontTexture = ASSET_TEX2D_SMALLFONT_2; + *ch -= 0x60; } fontCharU = gDebugFontCoords[gDebugFontTexture][*ch].u; stringLength = ((stringLength + gDebugFontCoords[gDebugFontTexture][*ch].v) - fontCharU) + (pad = 1); @@ -350,8 +355,8 @@ UNUSED s32 debug_text_width(const char *format, ...) { return stringLength; } -s32 func_800B653C(Gfx **dList, u8 *buffer) { - u8 *bufferCopy; +s32 func_800B653C(Gfx **dList, char *buffer) { + char *bufferCopy; s32 xOffset; u8 red; u8 green; @@ -365,13 +370,13 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { while (bufferValue != NULL) { xOffset = 0; switch (bufferValue) { - case 0x83: - D_80127CB4 = 0; + case 0x83: // Leave fixed-width mode + gDebugFixedWidthMode = FALSE; break; - case 0x84: - D_80127CB4 = 1; + case 0x84: // Enter fixed-width mode + gDebugFixedWidthMode = TRUE; break; - case 0x81: + case 0x81: // Set the text color from the next 4 bytes red = buffer[0]; green = buffer[1]; blue = buffer[2]; @@ -381,7 +386,7 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { gDPSetEnvColor((*dList)++, red, green, blue, alpha); } break; - case 0x85: + case 0x85: // Set the background color from the next 4 bytes red = buffer[0]; green = buffer[1]; blue = buffer[2]; @@ -391,7 +396,7 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { gDPSetPrimColor((*dList)++, 0, 0, red, green, blue, alpha); } break; - case 0x82: + case 0x82: // Set debug text position from the next 4 bytes if (!gDebugTextOn) { debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10); } @@ -403,10 +408,10 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { D_80127CB2 = gDebugTextY; buffer += 4; break; - case 0x20: + case ' ': // Space xOffset = 6; break; - case 10: + case '\n': // Line Feed if (!gDebugTextOn) { debug_text_background(dList, D_80127CB0, D_80127CB2, gDebugTextX, gDebugTextY + 10); } @@ -414,7 +419,7 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { D_80127CB0 = gDebugTextX; D_80127CB2 = gDebugTextY; break; - case 9: + case '\t': // HT - Horizontal Tab if (!(gDebugTextX % 32)) { xOffset = 32; } else { @@ -426,7 +431,7 @@ s32 func_800B653C(Gfx **dList, u8 *buffer) { break; } - if (D_80127CB4 != 0 && bufferValue >= 32 && bufferValue < 0x80) { + if (gDebugFixedWidthMode && bufferValue >= 0x20 && bufferValue < 0x80) { xOffset = 7; } gDebugTextX += xOffset; @@ -468,7 +473,7 @@ s32 debug_text_character(Gfx **dList, s32 asciiVal) { s32 fontCharWidth; s32 fontCharU; - if (asciiVal < '@') { + if (asciiVal < 0x40) { // Character is a symbol or number and not a letter if (gDebugFontTexture != 0) { if (gDebugTextOn) { @@ -477,8 +482,8 @@ s32 debug_text_character(Gfx **dList, s32 asciiVal) { } gDebugFontTexture = 0; } - asciiVal -= '!'; - } else if (asciiVal < '`') { + asciiVal -= 0x21; + } else if (asciiVal < 0x60) { // Character is a upper case letter if (gDebugFontTexture != 1) { if (gDebugTextOn) { @@ -487,7 +492,7 @@ s32 debug_text_character(Gfx **dList, s32 asciiVal) { } gDebugFontTexture = 1; } - asciiVal -= '@'; + asciiVal -= 0x40; } else if (asciiVal <= 0x7F) { // Character is a lower case letter if (gDebugFontTexture != 2) { @@ -497,7 +502,7 @@ s32 debug_text_character(Gfx **dList, s32 asciiVal) { } gDebugFontTexture = 2; } - asciiVal -= '`'; + asciiVal -= 0x60; } fontCharU = gDebugFontCoords[gDebugFontTexture][asciiVal].u; fontCharWidth = (gDebugFontCoords[gDebugFontTexture][asciiVal].v - fontCharU) + 1; diff --git a/src/printf.h b/src/printf.h index 4bc1e47a..dcb043c5 100644 --- a/src/printf.h +++ b/src/printf.h @@ -44,8 +44,7 @@ typedef struct TexFontCoords { RENDER_PRINTF_CMD_END -char *_itoa(u64 n, char *outBuffer, u32 radix, s32 useUpperCase); -void func_800B4A08(s32 setting); +void sprintfSetSpacingCodes(s32 setting); void debug_text_init(void); void set_render_printf_colour(u8 red, u8 green, u8 blue, u8 alpha); void set_render_printf_background_colour(u8 red, u8 green, u8 blue, u8 alpha); @@ -57,8 +56,7 @@ s32 render_printf(const char *format, ...); void debug_text_bounds(void); void debug_text_origin(void); void debug_text_newline(void); - -s32 func_800B653C(Gfx**, u8*); +s32 func_800B653C(Gfx**, char*); int vsprintf(char *s, const char *fmt, ...); #endif diff --git a/src/textures_sprites.h b/src/textures_sprites.h index f0f55096..5ca85c3c 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -161,18 +161,18 @@ void func_8007F1E8(LevelHeader_70 *arg0); void init_pulsating_light_data(PulsatingLightData *data); void update_pulsating_light_data(PulsatingLightData *data, s32 timeDelta); TextureHeader *set_animated_texture_header(TextureHeader *texHead, s32 offset); -TextureHeader *load_texture(s32 arg0); // Non Matching -s32 tex_asset_size(s32 id); // Non Matching -s32 tex_cache_asset_id(s32 cacheID); // Non Matching +TextureHeader *load_texture(s32 arg0); +s32 tex_asset_size(s32 id); +s32 tex_cache_asset_id(s32 cacheID); s32 load_sprite_info(s32 spriteIndex, s32 *numOfInstancesOut, s32 *unkOut, s32 *numFramesOut, s32 *formatOut, - s32 *sizeOut); // Non Matching -void gfx_init_basic_xlu(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor); // Non Matching -void func_8007CA68(s32 spriteID, s32 arg1, s32 *arg2, s32 *arg3, s32 *arg4); // Non Matching + s32 *sizeOut); +void gfx_init_basic_xlu(Gfx **dList, u32 index, u32 primitiveColor, u32 environmentColor); +void func_8007CA68(s32 arg0, s32 arg1, s32 *arg2, s32 *arg3, s32 *arg4); Sprite *tex_load_sprite(s32 spriteID, s32 arg1); -void tex_init_textures(void); // Non Matching +void tex_init_textures(void); void material_set_blinking_lights(Gfx **dList, TextureHeader *texture_list, u32 flags, - s32 texture_index); // Non Matching -void material_init(TextureHeader *tex, Gfx *_dList); // Non Matching -void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2); // Non Matching + s32 texture_index); +void material_init(TextureHeader *tex, Gfx *_dList); +void func_8007CDC0(Sprite *sprite1, Sprite *sprite2, s32 arg2); #endif diff --git a/src/tracks.c b/src/tracks.c index ef59e071..51cb35ff 100644 --- a/src/tracks.c +++ b/src/tracks.c @@ -1274,7 +1274,7 @@ void func_800278E8(s32 updateRate) { } camera->trans.rotation.z_rotation = 0; camera->cameraSegmentID = get_level_segment_index_from_position(camera->trans.x_position, currentRacer->oy1, - camera->trans.z_position); + camera->trans.z_position); D_8011B104 = currentRacer->cameraIndex; } } @@ -1426,10 +1426,8 @@ void func_80028050(void) { var_a1 = texHeader->width * 16 * gCurrentLevelHeader2->unkA0; var_a2 = texHeader->height * 16 * gCurrentLevelHeader2->unkA1; - var_v0 = - ((s32) (camera->trans.x_position * (var_f14 / var_a1)) + (gCurrentLevelHeader2->unkA8 >> 4)) & uCoordMask; - var_v1 = - ((s32) (camera->trans.z_position * (var_f14 / var_a2)) + (gCurrentLevelHeader2->unkAA >> 4)) & vCoordMask; + var_v0 = ((s32) (camera->trans.x_position * (var_f14 / var_a1)) + (gCurrentLevelHeader2->unkA8 >> 4)) & uCoordMask; + var_v1 = ((s32) (camera->trans.z_position * (var_f14 / var_a2)) + (gCurrentLevelHeader2->unkAA >> 4)) & vCoordMask; var_f14 = var_a1 * xCos; pos.z = var_a1 * xCos; diff --git a/src/weather.c b/src/weather.c index 8e42c184..0eb2afa9 100644 --- a/src/weather.c +++ b/src/weather.c @@ -87,14 +87,14 @@ Vertex gRainVertices[16] = { }; RainPosData gRainSplashSegments[8] = { - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, - { { { { { 0, 0, 0 } } }, 0, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, + { { { { { 0, 0, 0 } } }, { 0 }, 1.0f, 0.0f, 0.0f, 0.0f }, 0, 0 }, }; RainGfxData gRainGfx[2] = { diff --git a/ver/symbols/symbol_addrs.jpn.v79.txt b/ver/symbols/symbol_addrs.jpn.v79.txt index 7e1f8232..12fd0060 100644 --- a/ver/symbols/symbol_addrs.jpn.v79.txt +++ b/ver/symbols/symbol_addrs.jpn.v79.txt @@ -1683,7 +1683,7 @@ memset = 0x800B4F0C; // printf.c .text _itoa = 0x800B4F40; -func_800B4A08 = 0x800B5008; +sprintfSetSpacingCodes = 0x800B5008; sprintf = 0x800B5014; vsprintf = 0x800B5040; debug_text_init = 0x800B6488; @@ -2523,12 +2523,13 @@ sGameTitleTileTextures = 0x800E1174; // size:0x18 sGameTitleTileOffsets = 0x800E118C; // size:0x60 gTitleCinematicText = 0x800E11EC; -D_800E142C_E202C = 0x800E142C; // new? +gTitleCinematicTextJpn = 0x800E142C; gTitleCinematicTextColourCount = 0x800E1454; gTitleCinematicTextColours = 0x800E1458; unused_800DFA0C = 0x800E146C; gOptionMenuStrings = 0x800E1470; // size:0x1C -gOptionMenuTextures = 0x800E148C; // size:0x10 +gOptionMenuTextures = 0x800E148C; // size:0xC +gOptionMenuImageIndices = 0x800E1498; // size:0x2 gAudioMenuStrings = 0x800E149C; // size:0x80 gMusicTestSongIndex = 0x800E151C; gSfxVolumeSliderValue = 0x800E1520; @@ -2863,7 +2864,7 @@ D_800E2EC4 = 0x800E49B4; gCurrentHovercraftParticleOpacity = 0x800E49DC; // printf.c .data -D_800E2EF0 = 0x800E49E0; +gSprintfSpacingCode = 0x800E49E0; gDebugFontCoords = 0x800E49E4; dDebugFontSettings = 0x800E4AA8; @@ -4459,7 +4460,7 @@ gDebugTextX = 0x8012975C; gDebugTextY = 0x8012975E; D_80127CB0 = 0x80129760; D_80127CB2 = 0x80129762; -D_80127CB4 = 0x80129764; +gDebugFixedWidthMode = 0x80129764; gDebugTextOn = 0x80129768; gDebugBoundsX1 = 0x8012976C; gDebugBoundsX2 = 0x80129770; diff --git a/ver/symbols/symbol_addrs.pal.v77.txt b/ver/symbols/symbol_addrs.pal.v77.txt index 690edc17..d7837efd 100644 --- a/ver/symbols/symbol_addrs.pal.v77.txt +++ b/ver/symbols/symbol_addrs.pal.v77.txt @@ -1668,7 +1668,7 @@ strcasecmp = 0x800B4824; strncasecmp = 0x800B48D8; memset = 0x800B499C; _itoa = 0x800B49D0; -func_800B4A08 = 0x800B4A98; +sprintfSetSpacingCodes = 0x800B4A98; sprintf = 0x800B4AA4; vsprintf = 0x800B4AD0; debug_text_init = 0x800B5F18; @@ -2375,7 +2375,8 @@ gTitleCinematicTextColourCount = 0x800DFA84; gTitleCinematicTextColours = 0x800DFA88; unused_800DFA0C = 0x800DFA9C; gOptionMenuStrings = 0x800DFAA0; // size:0x1C -gOptionMenuTextures = 0x800DFABC; // size:0x10 +gOptionMenuTextures = 0x800DFABC; // size:0xC +gOptionMenuImageIndices = 0x800DFAC8; // size:0x2 gAudioMenuStrings = 0x800DFACC; // size:0x80 gMusicTestSongIndex = 0x800DFB4C; gSfxVolumeSliderValue = 0x800DFB50; @@ -2692,7 +2693,7 @@ gParticleCoordListQuad = 0x800E2F04; D_800E2E84 = 0x800E2F14; D_800E2EC4 = 0x800E2F54; gCurrentHovercraftParticleOpacity = 0x800E2F7C; -D_800E2EF0 = 0x800E2F80; +gSprintfSpacingCode = 0x800E2F80; gDebugFontCoords = 0x800E2F84; dDebugFontSettings = 0x800E3048; sLockupStatus = 0x800E30B0; @@ -4140,7 +4141,7 @@ gDebugTextX = 0x80127D3C; gDebugTextY = 0x80127D3E; D_80127CB0 = 0x80127D40; D_80127CB2 = 0x80127D42; -D_80127CB4 = 0x80127D44; +gDebugFixedWidthMode = 0x80127D44; gDebugTextOn = 0x80127D48; gDebugBoundsX1 = 0x80127D4C; gDebugBoundsX2 = 0x80127D50; diff --git a/ver/symbols/symbol_addrs.pal.v80.txt b/ver/symbols/symbol_addrs.pal.v80.txt index 569bedf1..a5fdafcc 100644 --- a/ver/symbols/symbol_addrs.pal.v80.txt +++ b/ver/symbols/symbol_addrs.pal.v80.txt @@ -1589,7 +1589,7 @@ strcasecmp = 0x800B4D84; strncasecmp = 0x800B4E38; memset = 0x800B4EFC; _itoa = 0x800B4F30; -func_800B4A08 = 0x800B4FF8; +sprintfSetSpacingCodes = 0x800B4FF8; sprintf = 0x800B5004; vsprintf = 0x800B5030; debug_text_init = 0x800B6478; @@ -2303,7 +2303,8 @@ gTitleCinematicTextColourCount = 0x800E0004; gTitleCinematicTextColours = 0x800E0008; unused_800DFA0C = 0x800E001C; gOptionMenuStrings = 0x800E0020; // size:0x1C -gOptionMenuTextures = 0x800E003C; // size:0x10 +gOptionMenuTextures = 0x800E003C; // size:0xC +gOptionMenuImageIndices = 0x800E0048; // size:0x2 gAudioMenuStrings = 0x800E004C; // size:0x80 gMusicTestSongIndex = 0x800E00CC; gSfxVolumeSliderValue = 0x800E00D0; @@ -2621,7 +2622,7 @@ gParticleCoordListQuad = 0x800E3494; D_800E2E84 = 0x800E34A4; D_800E2EC4 = 0x800E34E4; gCurrentHovercraftParticleOpacity = 0x800E350C; -D_800E2EF0 = 0x800E3510; +gSprintfSpacingCode = 0x800E3510; gDebugFontCoords = 0x800E3514; dDebugFontSettings = 0x800E35D8; sLockupStatus = 0x800E3640; @@ -4075,7 +4076,7 @@ gDebugTextX = 0x801282FC; gDebugTextY = 0x801282FE; D_80127CB0 = 0x80128300; D_80127CB2 = 0x80128302; -D_80127CB4 = 0x80128304; +gDebugFixedWidthMode = 0x80128304; gDebugTextOn = 0x80128308; gDebugBoundsX1 = 0x8012830C; gDebugBoundsX2 = 0x80128310; diff --git a/ver/symbols/symbol_addrs.us.v77.txt b/ver/symbols/symbol_addrs.us.v77.txt index 9e77ed46..9c8131a3 100644 --- a/ver/symbols/symbol_addrs.us.v77.txt +++ b/ver/symbols/symbol_addrs.us.v77.txt @@ -1678,7 +1678,7 @@ memset = 0x800B490C; // printf.c .text _itoa = 0x800B4940; -func_800B4A08 = 0x800B4A08; +sprintfSetSpacingCodes = 0x800B4A08; sprintf = 0x800B4A14; vsprintf = 0x800B4A40; debug_text_init = 0x800B5E88; @@ -2520,7 +2520,8 @@ gTitleCinematicTextColourCount = 0x800DF9F4; gTitleCinematicTextColours = 0x800DF9F8; unused_800DFA0C = 0x800DFA0C; gOptionMenuStrings = 0x800DFA10; // size:0x1C -gOptionMenuTextures = 0x800DFA2C; // size:0x10 +gOptionMenuTextures = 0x800DFA2C; // size:0xC +gOptionMenuImageIndices = 0x800DFA38; // size:0x2 gAudioMenuStrings = 0x800DFA3C; // size:0x80 gMusicTestSongIndex = 0x800DFABC; gSfxVolumeSliderValue = 0x800DFAC0; @@ -2845,7 +2846,7 @@ D_800E2EC4 = 0x800E2EC4; gCurrentHovercraftParticleOpacity = 0x800E2EEC; // printf.c .data -D_800E2EF0 = 0x800E2EF0; +gSprintfSpacingCode = 0x800E2EF0; gDebugFontCoords = 0x800E2EF4; dDebugFontSettings = 0x800E2FB8; @@ -4579,7 +4580,7 @@ gDebugTextX = 0x80127CAC; gDebugTextY = 0x80127CAE; D_80127CB0 = 0x80127CB0; D_80127CB2 = 0x80127CB2; -D_80127CB4 = 0x80127CB4; +gDebugFixedWidthMode = 0x80127CB4; gDebugTextOn = 0x80127CB8; gDebugBoundsX1 = 0x80127CBC; gDebugBoundsX2 = 0x80127CC0; diff --git a/ver/symbols/symbol_addrs.us.v80.txt b/ver/symbols/symbol_addrs.us.v80.txt index c2b47567..3c522de7 100644 --- a/ver/symbols/symbol_addrs.us.v80.txt +++ b/ver/symbols/symbol_addrs.us.v80.txt @@ -1588,7 +1588,7 @@ strcasecmp = 0x800B4CF4; strncasecmp = 0x800B4DA8; memset = 0x800B4E6C; _itoa = 0x800B4EA0; -func_800B4A08 = 0x800B4F68; +sprintfSetSpacingCodes = 0x800B4F68; sprintf = 0x800B4F74; vsprintf = 0x800B4FA0; debug_text_init = 0x800B63E8; @@ -2300,7 +2300,8 @@ gTitleCinematicTextColourCount = 0x800DFF74; gTitleCinematicTextColours = 0x800DFF78; unused_800DFA0C = 0x800DFF8C; gOptionMenuStrings = 0x800DFF90; // size:0x1C -gOptionMenuTextures = 0x800DFFAC; // size:0x10 +gOptionMenuTextures = 0x800DFFAC; // size:0xC +gOptionMenuImageIndices = 0x800DFFB8; // size:0x2 gAudioMenuStrings = 0x800DFFBC; // size:0x80 gMusicTestSongIndex = 0x800E003C; gSfxVolumeSliderValue = 0x800E0040; @@ -2618,7 +2619,7 @@ gParticleCoordListQuad = 0x800E3404; D_800E2E84 = 0x800E3414; D_800E2EC4 = 0x800E3454; gCurrentHovercraftParticleOpacity = 0x800E347C; -D_800E2EF0 = 0x800E3480; +gSprintfSpacingCode = 0x800E3480; gDebugFontCoords = 0x800E3484; dDebugFontSettings = 0x800E3548; sLockupStatus = 0x800E35B0; @@ -4070,7 +4071,7 @@ gDebugTextX = 0x8012826C; gDebugTextY = 0x8012826E; D_80127CB0 = 0x80128270; D_80127CB2 = 0x80128272; -D_80127CB4 = 0x80128274; +gDebugFixedWidthMode = 0x80128274; gDebugTextOn = 0x80128278; gDebugBoundsX1 = 0x8012827C; gDebugBoundsX2 = 0x80128280;