diff --git a/src/game.c b/src/game.c index b1b6adf2..f3c742d9 100644 --- a/src/game.c +++ b/src/game.c @@ -136,7 +136,7 @@ unk8012117C *D_8012117C; s32 D_80121180[16]; -u32 *D_801211C0[2]; +TempStruct5 *D_801211C0; s16 D_801211C8[20]; Gfx *gDisplayLists[2]; Gfx *gCurrDisplayList; @@ -736,17 +736,17 @@ void func_8006BFC8(s8 *arg0) { } temp2 = gTempAssetTable[phi_s0]; temp = gTempAssetTable[phi_s0 + 1] - temp2; - D_801211C0[0] = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW); - load_asset_to_address(ASSET_UNKNOWN_0, D_801211C0[0], temp2, temp); + D_801211C0 = allocate_from_main_pool_safe(temp, COLOUR_TAG_YELLOW); + load_asset_to_address(ASSET_UNKNOWN_0, D_801211C0, temp2, temp); free_from_memory_pool(gTempAssetTable); } void func_8006C164(void) { - free_from_memory_pool(D_801211C0[0]); + free_from_memory_pool(D_801211C0); } -u32 *func_8006C18C(void) { - return D_801211C0[0]; +TempStruct5 *func_8006C18C(void) { + return D_801211C0; } s8 func_8006C19C(void) { diff --git a/src/game.h b/src/game.h index 5b284aa6..6bcf2128 100644 --- a/src/game.h +++ b/src/game.h @@ -5,6 +5,7 @@ #include "structs.h" #include "fade_transition.h" #include "libc/math.h" +#include "racer.h" enum RenderContext { DRAW_INTRO = -1, @@ -104,7 +105,7 @@ u8 *get_level_name(s32 levelId); void func_8006BEFC(void); void func_8006BFC8(s8 *arg0); void func_8006C164(void); -u32 *func_8006C18C(void); +TempStruct5 *func_8006C18C(void); s8 func_8006C19C(void); void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); diff --git a/src/racer.c b/src/racer.c index 81b2d4b9..db409338 100644 --- a/src/racer.c +++ b/src/racer.c @@ -199,7 +199,7 @@ s16 D_8011D5B8; GLOBAL_ASM("asm/non_matchings/racer/func_80042D20.s") -void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) { +void func_80043ECC(s32 arg0, Object_Racer *racer, s32 updateRate) { TempStruct5 *temp_v0; s8 *test; s8 phi_a0; @@ -214,8 +214,8 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) { D_8011D5BC = 0; return; } - temp_v0 = (TempStruct5 *)func_8006C18C(); - if (arg1->unk1D3) { + temp_v0 = func_8006C18C(); + if (racer->boostTimer) { if (!D_8011D5BB) { temp_v0->unk8[3][0] += temp_v0->unk8[3][2]; temp_v0->unk8[3][1] += temp_v0->unk8[3][3]; @@ -232,21 +232,21 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) { } D_8011D5BA = 0; } - if (arg1->unk173) { - if (D_8011D5BC < arg1->unk174) { + if (racer->balloon_quantity) { + if (D_8011D5BC < racer->balloon_level) { temp_v0->unk8[1][0] += temp_v0->unk8[1][2]; temp_v0->unk8[1][1] += temp_v0->unk8[1][3]; } - D_8011D5BC = arg1->unk174; + D_8011D5BC = racer->balloon_level; } else { D_8011D5BC = 0; } test = get_misc_asset(12); - if ((D_8011D530 & 0x2000) && arg1->unk173) { - if (arg1->unk174 < 3) { - phi_a0 = test[arg1->unk172 * 3 + arg1->unk174]; + if ((D_8011D530 & 0x2000) && racer->balloon_quantity) { + if (racer->balloon_level < 3) { + phi_a0 = test[racer->balloon_type * 3 + racer->balloon_level]; } else { - phi_a0 = arg1->unk172; + phi_a0 = racer->balloon_type; } if (D_800DCD90[phi_a0] == 1) { temp_v0->unk8[2][0] += temp_v0->unk8[2][2]; @@ -500,8 +500,8 @@ void update_camera_hovercraft(f32 updateRate, Object *obj, Object_Racer *racer) gCameraObject->trans.z_position = obj->segment.trans.z_position + zVel; gCameraObject->trans.y_rotation = racer->unk196; segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); - if (segmentIndex != -1) { - gCameraObject->unk34 = segmentIndex; + if (segmentIndex != SEGMENT_NONE) { + gCameraObject->segmentIndex = segmentIndex; } } @@ -789,7 +789,7 @@ void update_camera_plane(f32 updateRate, Object* obj, Object_Racer* racer) { tempVel = gCameraObject->trans.x_position; segmentIndex = get_level_segment_index_from_position(tempVel, gCameraObject->trans.y_position, gCameraObject->trans.z_position); if (segmentIndex != -1) { - gCameraObject->unk34 = segmentIndex; + gCameraObject->segmentIndex = segmentIndex; } racer->unk196 = gCameraObject->trans.y_rotation; } @@ -819,8 +819,8 @@ void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) { delta = (s32) updateRate; zoom = 120.0f; - if (gRaceStartTimer >= 0x3D) { - zoom += ((f32) (gRaceStartTimer - 0x3C) * 4.0f); + if (gRaceStartTimer > 60) { + zoom += ((f32) (gRaceStartTimer - 60) * 4.0f); } racer->unk196 = 0x8000 - racer->unk1A0; if (get_viewport_count() == 1) { @@ -860,8 +860,8 @@ void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) { gCameraObject->trans.x_rotation += ((angle * delta) >> 4); gCameraObject->trans.y_rotation = racer->unk196; segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); - if (segmentIndex != -1) { - gCameraObject->unk34 = segmentIndex; + if (segmentIndex != SEGMENT_NONE) { + gCameraObject->segmentIndex = segmentIndex; } racer->unk196 = gCameraObject->trans.y_rotation; gCameraObject->trans.x_position += gCameraObject->x_velocity; @@ -1949,7 +1949,7 @@ void func_800580B4(Object *obj, Object_Racer *racer, s32 mode, f32 arg3) { } } -#ifdef NON_EQUIVALENT +#ifdef NON_MATCHING void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) { s64 pad; s32 segmentIndex; @@ -2067,7 +2067,7 @@ void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) { baseDistance += baseSpeed * 30.0f; } if (gRaceStartTimer == 0) { - if (normalise_time(0x24) < racer->boostTimer) { + if (normalise_time(36) < racer->boostTimer) { baseDistance = -30.0f; } else if (racer->boostTimer > 0) { baseDistance = 180.0f; @@ -2144,7 +2144,7 @@ void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) { lateralOffset = (yOffset = gCameraObject->trans.x_position); segmentIndex = get_level_segment_index_from_position(lateralOffset, gCameraObject->trans.y_position, gCameraObject->trans.z_position); if (segmentIndex != -1) { - gCameraObject->unk34 = segmentIndex; + gCameraObject->segmentIndex = segmentIndex; } racer->unk196 = gCameraObject->trans.y_rotation; } @@ -2158,7 +2158,7 @@ GLOBAL_ASM("asm/non_matchings/racer/update_camera_car.s") * Otherwise, it will follow a set path while rotating. */ void update_camera_finish_challenge(UNUSED f32 updateRate, Object *obj, Object_Racer *racer) { - s32 levelSeg; + s32 segmentIndex; f32 temp_f12; f32 zOffset; f32 xOffset; @@ -2179,9 +2179,9 @@ void update_camera_finish_challenge(UNUSED f32 updateRate, Object *obj, Object_R gCameraObject->trans.y_position = obj->segment.trans.y_position + 45.0f; } gCameraObject->trans.z_position = obj->segment.trans.z_position + zOffset; - levelSeg = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); - if (levelSeg != -1) { - gCameraObject->unk34 = levelSeg; + segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); + if (segmentIndex != SEGMENT_NONE) { + gCameraObject->segmentIndex = segmentIndex; } racer->unk196 = gCameraObject->trans.y_rotation; } @@ -2215,7 +2215,7 @@ void update_camera_finish_race(UNUSED f32 updateRate, Object *obj, Object_Racer gCameraObject->trans.y_rotation = (s16) (0x8000 - func_8007066C((s32) xDiff, (s32) zDiff)); gCameraObject->trans.x_rotation = func_8007066C((s32) yDiff, (s32) distance); gCameraObject->trans.z_rotation = 0; - gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); + gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); } /** @@ -2232,7 +2232,7 @@ void update_camera_fixed(f32 updateRate, struct Object *obj, struct Object_Racer gCameraObject->trans.y_rotation += ((((-func_8007066C((s32) xDiff, (s32) zDiff)) - gCameraObject->trans.y_rotation) + 0x8000) * delta) >> 4; gCameraObject->trans.z_rotation -= (((s32) (gCameraObject->trans.z_rotation * delta)) >> 4); - gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, + gCameraObject->segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); } diff --git a/src/racer.h b/src/racer.h index 10b6d8e9..b30137d5 100644 --- a/src/racer.h +++ b/src/racer.h @@ -5,6 +5,8 @@ #include "structs.h" #include "level_object_entries.h" +#define SEGMENT_NONE -1 // If the level in question does not use segmentation. + typedef enum ActivePlayers { PLAYER_COMPUTER = -1, PLAYER_ONE, @@ -59,7 +61,7 @@ typedef struct ObjectCamera { /* 0x0028 */ f32 y_velocity; /* 0x002C */ f32 z_velocity; /* 0x0030 */ f32 unk30; - /* 0x0034 */ s16 unk34; + /* 0x0034 */ s16 segmentIndex; /* 0x0036 */ s16 mode; /* 0x0038 */ s16 unk38; /* 0x003A */ s8 unk3A; @@ -81,32 +83,11 @@ typedef struct unk8005234C { s16 unk16C; } unk8005234C; -// Also fairly certain this is NOT Object_Racer. -typedef struct Object_64_Unknown5 { - u8 pad0[0x88]; - u8 unk89; - u8 pad90[0xE9]; - s8 unk172; - s8 unk173; - s8 unk174; - u8 pad175[0x5E]; - s8 unk1D3; -} Object_64_Unknown5; - typedef struct TempStruct5 { s8 pad0[8]; s8 unk8[4][4]; } TempStruct5; -typedef struct Object_64_80053478 { - u8 unk0[0x2C]; - f32 unk2C; // Forward Velocity? - u8 unk30[0x1B1]; - s8 unk1E1; // Steering Value? - u8 unk1E2[4]; - s8 unk1E6; -} Object_64_80053478; - /* Unknown Size */ typedef struct unk800535C4 { s16 unk0; @@ -239,7 +220,7 @@ void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2); void func_80050754(Object *obj, Object_Racer *racer, f32 divisor); void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer); void func_80044170(Object *obj, Object_Racer *racer, s32 updateRate); -void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate); +void func_80043ECC(s32 arg0, Object_Racer *racer, s32 updateRate); void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate); void func_80057A40(Object *obj, Object_Racer *racer, f32 updateRate);