diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2023-10-06 00:19:09 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-06 00:19:09 -0600 |
| commit | 2b74bbbcefe396564a55357eda094fc8c8baf36a (patch) | |
| tree | 02ff798bcacc50d767e033cb2d13cab819e72eee /src | |
| parent | 274fc21ffa271492d1fa231c99fc48a11e3bbed1 (diff) | |
Doc setup_game_memory, label syms, add osSyncPrintf support, match funcs (#444)
* Doc setup_game_memory and label syms
* match func_800132F4
* match func label defines
* fix some fake ptrs
* match more code
* Matches
* Add osSyncPrintf support and matches
* Add func equiv to draw_square and add comment to is_debug
Diffstat (limited to 'src')
| -rw-r--r-- | src/code_800029B0.c | 8 | ||||
| -rw-r--r-- | src/code_800029B0.h | 8 | ||||
| -rw-r--r-- | src/code_80005FD0.c | 1423 | ||||
| -rw-r--r-- | src/code_80005FD0.h | 23 | ||||
| -rw-r--r-- | src/code_8001F980.c | 52 | ||||
| -rw-r--r-- | src/code_80071F00.c | 148 | ||||
| -rw-r--r-- | src/crash_screen.c | 44 | ||||
| -rw-r--r-- | src/debug/all_variables.h | 2 | ||||
| -rw-r--r-- | src/ending/code_80281780.c | 21 | ||||
| -rw-r--r-- | src/hud_renderer.c | 131 | ||||
| -rw-r--r-- | src/kart_dma.c | 8 | ||||
| -rw-r--r-- | src/main.c | 74 | ||||
| -rw-r--r-- | src/os/is_debug.c | 145 | ||||
| -rw-r--r-- | src/os/osSyncPrintf.c | 5 | ||||
| -rw-r--r-- | src/racing/memory.c | 4 |
15 files changed, 864 insertions, 1232 deletions
diff --git a/src/code_800029B0.c b/src/code_800029B0.c index cbc1e1cf4..a9179a604 100644 --- a/src/code_800029B0.c +++ b/src/code_800029B0.c @@ -85,11 +85,11 @@ u16 D_8015F702; f32 D_8015F704; Vec3f D_8015F708; UNUSED u32 D_8015F718[3]; // Likely held ptrs to segmented data. -u32 gFreeMemorySize; -u32 gNextFreeMemoryAddress; -u32 gHeapEndPtr; +size_t gFreeMemorySize; +uintptr_t gNextFreeMemoryAddress; +uintptr_t gHeapEndPtr; u32 D_8015F730; -u32 gFreeMemoryResetAnchor; +uintptr_t gFreeMemoryResetAnchor; Vec3f D_8015F738; Vec3f D_8015F748; Vec3f D_8015F758; diff --git a/src/code_800029B0.h b/src/code_800029B0.h index eb8e9e940..e5e3946b2 100644 --- a/src/code_800029B0.h +++ b/src/code_800029B0.h @@ -49,12 +49,12 @@ extern u16 D_8015F702; extern f32 D_8015F704; extern Vec3f D_8015F708; extern UNUSED u32 D_8015F718[3]; -extern u32 gFreeMemorySize; -extern u32 gNextFreeMemoryAddress; -extern u32 gHeapEndPtr; +extern size_t gFreeMemorySize; +extern uintptr_t gNextFreeMemoryAddress; +extern uintptr_t gHeapEndPtr; extern u32 D_8015F730; -extern u32 gFreeMemoryResetAnchor; +extern uintptr_t gFreeMemoryResetAnchor; extern Vec3f D_8015F738; extern Vec3f D_8015F748; extern Vec3f D_8015F758; diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index 96452781b..c37e2282f 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -24,6 +24,7 @@ #include "common_structs.h" #include "main.h" #include "menus.h" +#include <actor_types.h> extern UnkCommonTextureStruct0 *D_800DC720[]; @@ -2588,7 +2589,7 @@ extern f32 D_80162FA0; extern f32 D_80162FA8; extern u16 D_80164430; -void func_8000BA14(s32 arg0, f32 arg1, f32 arg2, s16 arg3) { +void func_8000BA14(u16 arg0, f32 arg1, f32 arg2, s16 arg3) { f32 sp54; f32 sp50; f32 sp4C; @@ -3993,7 +3994,7 @@ void func_8000EF20(void) { } void func_8000F0E0(void) { - D_80164670 = 0; + D_80164670[0] = 0; D_80164678[0] = 0; D_80164672 = 0; D_8016467A = 0; @@ -5465,38 +5466,35 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80011B14.s") #ifdef MIPS_TO_C //generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 -extern ? D_80162EB8; -extern s16 D_801630E8; -extern s16 D_801632D0; -extern s16 D_801632E8; -//extern ? D_801634F8; -extern u16 gNearestWaypointByPlayerId; -s16 gCurrentCourseId; /* unable to generate initializer */ - -void func_80011D48(s32 arg0, void *arg1) { - s32 temp_a2; - s32 temp_v0; - void *temp_t3; - void *temp_v1; - - temp_v0 = arg0 * 2; - temp_t3 = (*(&D_801632D0 + temp_v0) * 8) + *(&D_80162EB8 + (gCurrentCourseId * 4)); - D_801632B0 = temp_t3; - temp_a2 = temp_t3->unk4; - if (*(&gNearestWaypointByPlayerId + temp_v0) >= temp_t3->unk2) { - switch (temp_a2) { +//extern ? D_80162EB8; +extern s16 D_801630E8[]; +extern s32 D_801632B0; + +void func_80011D48(s32 playerIndex, Player *player) { + //s32 temp_a2; + //s32 temp_v0; + //s32 temp_t3; + //void *temp_v1; + + // temp_v0 = playerIndex * 2; + // * 8) ? + //temp_t3 = D_801632D0[playerIndex] + D_80162EB8[gCurrentCourseId]; + D_801632B0 = D_801632D0[playerIndex] + D_80162EB8[gCurrentCourseId]; + // temp_a2 = temp_t3; + if (gNearestWaypointByPlayerId[playerIndex] >= D_801632B0) { + switch (D_801632B0) { case 1: - arg1->unkBC = arg1->unkBC & ~0x10; - *(&D_801630E8 + temp_v0) = 0; - *(&D_801632E8 + temp_v0) = 1; - return; + player->unk_0BC &= ~0x10; + D_801630E8[playerIndex] = 0; + D_801632E8[playerIndex] = 1; + break; case 3: case 4: case 5: - temp_v1 = (arg0 * 0x10) + &D_801634F8; - temp_v1->unk4 = temp_v1->unkC; - *(&D_801632E8 + temp_v0) = 1; - return; + //temp_v1 = D_801634F8[playerIndex]; + D_801634F8[playerIndex].unk4 = D_801634F8[playerIndex].unkC; + D_801632E8[playerIndex] = 1; + break; case 2: case 6: case 7: @@ -5504,45 +5502,30 @@ void func_80011D48(s32 arg0, void *arg1) { case 9: case 10: case 11: - *(&D_801632E8 + temp_v0) = 1; + D_801632E8[playerIndex] = 1; /* Duplicate return node #6. Try simplifying control flow for better match */ - return; + break; } - } else { - default: } } #else GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80011D48.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_80011B14(Player *); // extern -void func_80011D48(Player *); // extern -extern s16 D_801632E8; - -void func_80011E38(s32 arg0) { - Player *temp_a1; - u16 temp_v0; +void func_80011E38(s32 playerIndex) { + Player *player = gPlayerOne + playerIndex; - temp_v0 = *(&D_801632E8 + (arg0 * 2)); - temp_a1 = &gPlayerOne[arg0]; - if (temp_v0 != 0) { - if (temp_v0 != 1) { - if (temp_v0 != 2) { - return; - } - func_80011D48(temp_a1); - // Duplicate return node #6. Try simplifying control flow for better match - return; - } - func_80011B14(temp_a1); + switch(D_801632E8[playerIndex]) { + case 0: + break; + case 1: + func_80011B14(playerIndex, player); + break; + case 2: + func_80011D48(playerIndex, player); + break; } } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80011E38.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit bece1d6db17040749f77dbbd090363cc6fb926f9 @@ -5604,7 +5587,7 @@ extern s16 D_80162EB0; extern s32 D_8016359C; f32 func_802AE1C0(f32, f32, f32); -s32 func_8001168C(void *, struct TrackWayPoint *, s32); +s32 func_8001168C(void *, void *, s32); void func_800120C8(void) { @@ -5621,39 +5604,24 @@ void func_800120C8(void) { } temp = (s16 *)D_80163598; - D_8016359C = func_8001168C(temp , waypoint, i - 1); + D_8016359C = func_8001168C(temp, waypoint, i - 1); D_80162EB0 = func_802AE1C0(temp[0], 2000.0f, temp[1]); } -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -s32 func_8001168C(s32, u16 *, s32); // extern -extern ? d_frappe_snowland_tree; -extern s16 D_80162EB2; -extern s32 D_80163598; -extern s32 D_8016359C; -extern uintptr_t gSegmentTable; - void func_80012190(void) { - u16 *temp_a1; - u16 *phi_v0; - s32 phi_v1; + struct TrackWayPoint *tree; + s32 i = 0; + + tree = (struct TrackWayPoint *) VIRTUAL_TO_PHYSICAL2(gSegmentTable[SEGMENT_NUMBER2(d_frappe_snowland_tree)] + (SEGMENT_OFFSET(d_frappe_snowland_tree))); - temp_a1 = *(&gSegmentTable + ((&d_frappe_snowland_tree >> 0x18) * 4)) + (&d_frappe_snowland_tree & 0xFFFFFF) + 0x80000000; - phi_v0 = temp_a1; - phi_v1 = 0; -loop_1: - phi_v0 += 8; - if (*phi_v0 != 0x8000) { - phi_v1 += 1; - goto loop_1; + for (i = 0; ; i++) { + if ((u16)tree[i].wayPointX == 0x8000) { + break; + } } - D_8016359C = func_8001168C(D_80163598, temp_a1, phi_v1 - 1); - D_80162EB2 = -0x28; + D_8016359C = func_8001168C(D_80163598, tree, i - 1); + D_80162EB2 = -40; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80012190.s") -#endif void func_80012220(VehicleStuff *vehicle) { f32 origXPos; @@ -5791,7 +5759,6 @@ void func_80012780(TrainCarStuff *trainCar, s16 *arg1, u16 arg2) { extern s16 D_80162FCC; //extern s32 D_80163598 extern s32 D_8016359C; -//extern TrainStuff D_801635C4; // This is really Vec2s D_80163598[465] but that does not match. // Likely because this is a shared pointer between courses. @@ -5808,13 +5775,14 @@ void func_800127E0(void) { s32 i; s32 j; - for (i = 0; i < 2; i++) { - // outputs 160 or 392 depending on the train + for (i = 0; i < NUM_TRAINS; i++) { + // outputs 160 or 392 depending on the train. // Wraps the value around to always output a valid waypoint. - waypointOffset = (((i * D_8016359C) / 2) + 160) % D_8016359C; + waypointOffset = (((i * D_8016359C) / NUM_TRAINS) + 160) % D_8016359C; + // 120.0f is about the maximum usable value sTrains[i].someMultiplier = 5.0f; - for (j = 0; j < 5; j++) { + for (j = 0; j < NUM_PASSENGER_CAR_ENTRIES; j++) { waypointOffset += 4; ptr1 = &sTrains[i].passengerCars[j]; ptr2 = &D_80163598[waypointOffset]; @@ -5831,30 +5799,31 @@ void func_800127E0(void) { ptr2 = &D_80163598[waypointOffset]; func_80012780(&sTrains[i].locomotive, ptr2, waypointOffset); - sTrains[i].numCars = 0; + // Only use locomotive unless overwritten below. + sTrains[i].numCars = LOCOMOTIVE_ONLY; } // Spawn all rolling stock in single player mode. switch (gScreenModeSelection) { - case 0: // single player - for (i = 0; i < 2; i++) { + case SCREEN_MODE_1P: // single player + for (i = 0; i < NUM_TRAINS; i++) { sTrains[i].tender.isActive = 1; // Same line required for matching... - for (j = 0; j < 5; j++) { sTrains[i].passengerCars[j].isActive = 1; } + for (j = 0; j < NUM_PASSENGER_CAR_ENTRIES; j++) { sTrains[i].passengerCars[j].isActive = 1; } - sTrains[i].numCars = 6; + sTrains[i].numCars = NUM_TENDERS + NUM_PASSENGER_CAR_ENTRIES; } break; // Spawn locomotive, tender, and one passenger car in versus 2/3 player mode. - case 1: // multiplayer fall-through - case 2: - if (gModeSelection != 0) { - for (i = 0; i < 2; i++) { + case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: // multiplayer fall-through + case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: + if (gModeSelection != GRAND_PRIX) { + for (i = 0; i < NUM_TRAINS; i++) { sTrains[i].tender.isActive = 1; sTrains[i].passengerCars[4].isActive = 1; - sTrains[i].numCars = 2; + sTrains[i].numCars = NUM_TENDERS + NUM_2P_PASSENGER_CARS; } } break; @@ -5880,13 +5849,9 @@ void func_80012A48(TrainCarStuff *trainCar, s16 arg1) { trainCarActor->velocity[2] = trainCar->velocity[2]; } -//#ifdef MIPS_TO_C -//generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc -s32 func_800755FC(s32, Vec3f, f32); /* extern */ +s32 func_800755FC(s32, Vec3f, f32); s16 func_800DBAC(Vec3f, Vec3s, f32); extern s16 D_80162FCC; -extern Vec3f D_801635A4; -extern Vec3s D_801635BC; void func_80012AC0(void) { @@ -5902,7 +5867,7 @@ void func_80012AC0(void) { D_80162FCC += 1; - for (i = 0; i < 2; i++) { + for (i = 0; i < NUM_TRAINS; i++) { temp_s0 = (u16) sTrains[i].locomotive.wayPointIndex; temp_f20 = sTrains[i].locomotive.position[0]; @@ -5914,16 +5879,15 @@ void func_80012AC0(void) { sTrains[i].locomotive.velocity[2] = sTrains[i].locomotive.position[2] - temp_f22; func_80012A48(&sTrains[i].locomotive, temp_v0); - //temp_v0_2 = (u16) sTrains[i].locomotive.wayPointIndex; + if ((temp_s0 != sTrains[i].locomotive.wayPointIndex) && ((sTrains[i].locomotive.wayPointIndex == 0x00BE) || (sTrains[i].locomotive.wayPointIndex == 0x0140))) { func_800C98B8(sTrains[i].locomotive.position, sTrains[i].locomotive.velocity, 0x1901800E); } else if (random_int(100) == 0) { func_800C98B8(sTrains[i].locomotive.position, sTrains[i].locomotive.velocity, 0x1901800D); - //if ((sTrains && sTrains) && sTrains) {} } - // temp_v0_3 = func_800061DC(&D_801635A4, 2000.0f, sTrains[i].someFlags); + sTrains[i].someFlags = func_800061DC(sTrains[i].locomotive.position, 2000.0f, sTrains[i].someFlags); if ((((s16) D_80162FCC % 5) == 0) && (sTrains[i].someFlags != 0)) { sp90[0] = sTrains[i].locomotive.position[0]; @@ -5944,7 +5908,7 @@ void func_80012AC0(void) { func_80012A48(car, temp_v0); } - for (j = 0; j < 5; j++) { + for (j = 0; j < NUM_PASSENGER_CAR_ENTRIES; j++) { car = &sTrains[i].passengerCars[j]; if (car->isActive == 1) { temp_f20 = car->position[0]; @@ -5959,10 +5923,6 @@ void func_80012AC0(void) { } } -//#else -//GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80012AC0.s") -//#endif - void func_80012DC0(s32 playerId, Player *player) { TrainCarStuff *trainCar; f32 playerPosX; @@ -6028,7 +5988,7 @@ void func_80013054(void) { isCrossingTriggeredByIndex[0] = 0; isCrossingTriggeredByIndex[1] = 0; - for (i = 0; i < 2; i++) { + for (i = 0; i < NUM_TRAINS; i++) { temp_f16 = sTrains[i].locomotive.wayPointIndex / ((f32) D_8016359C); temp_f18 = 0.72017354f; temp_f12 = 0.42299348f; @@ -6045,7 +6005,7 @@ void func_80013054(void) { } } - for (i = 0; i < 2; i++) { + for (i = 0; i < NUM_TRAINS; i++) { if (isCrossingTriggeredByIndex[i] == 1) { D_801637BC[i] += 1; } else { @@ -6079,48 +6039,41 @@ void func_800131DC(s32 playerId) { } } -#ifdef MIPS_TO_C -//generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc -extern s16 D_80162EB2; extern s16 D_801630FC; -extern s32 D_80163598; -extern ? D_801637EC; extern s8 D_8018EDF3; - void func_800132F4(void) { - PaddleWheelBoatStuff *temp_a0; PaddleWheelBoatStuff *var_a1; - s16 var_v1; - void *temp_a2; - - var_a1 = D_801637C0; - var_v1 = 0; - do { - temp_a2 = ((var_v1 & 0xFFFF) * 4) + D_80163598; - temp_a0 = var_a1; - var_a1->position[0] = (f32) temp_a2->unk0; + s32 i; + struct TrackWayPoint *temp_a2; + u16 temp; + for (i = 0; i < 1; i++) { + temp = i * 0xB4; + var_a1 = &D_801637C0[i]; + temp_a2 = &D_80163598[temp]; + var_a1->position[0] = (f32) temp_a2->wayPointX; var_a1->position[1] = (f32) D_80162EB2; - var_a1->wayPointIndex = var_v1; - var_v1 += 0xB4; + // Shouldn't this be wayPointZ? Something doesn't seem right here. + // Unless temp_a2 has been converted to X,Z with no Y. In-that case our + // struct is wrong or the member name is wrong. + var_a1->position[2] = (f32) temp_a2->wayPointY; + var_a1->wayPointIndex = i * 0xB4; var_a1->actorIndex = -1; - var_a1->position[2] = (f32) temp_a2->unk2; + if (D_8018EDF3 >= 3) { var_a1->isActive = 0; } else { var_a1->isActive = 1; } - var_a1 += 0x2C; - temp_a0->velocity[0] = 0.0f; - temp_a0->velocity[1] = 0.0f; - temp_a0->velocity[2] = 0.0f; - temp_a0->someMultiplier = 1.6666666f; - temp_a0->yRotation = 0; - } while (var_a1 != &D_801637EC); + var_a1->velocity[0] = 0.0f; + var_a1->velocity[1] = 0.0f; + var_a1->velocity[2] = 0.0f; + // fakematch + temp_a2 = &D_80163598[temp]; + var_a1->someMultiplier = 1.6666666f; + var_a1->yRotation = 0; + } D_801630FC = 0; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800132F4.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc @@ -6282,96 +6235,71 @@ void func_80013854(Player *player) { } } -#ifdef MIPS_TO_C -//generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc extern s16 D_801631C8; extern s16 D_8016347A; void func_800139E4(f32 arg0, f32 arg1, s32 arg2, s32 arg3, VehicleStuff *vehicle, struct TrackWayPoint *wayPointList) { - VehicleStuff *var_s0; - f32 *var_s1; - s16 *var_s2; - s16 temp_v0_2; - s16 var_v0; - s32 temp_hi; - s32 var_s3; - s32 var_s4; + VehicleStuff *veh; struct TrackWayPoint *temp_v0; - u16 temp_s7; - - temp_s7 = *gWaypointCountByPathIndex; - var_s3 = 0; - if (arg2 > 0) { - var_s0 = vehicle; - var_s4 = 0; - var_s1 = var_s0->position; - var_s2 = &var_s0->wayPointIndex; - do { - temp_hi = (s32) ((var_s4 / arg2) + arg3) % (s32) temp_s7; - temp_v0 = &wayPointList[temp_hi & 0xFFFF]; - var_s0->position[0] = (f32) temp_v0->wayPointX; - var_s0->position[1] = (f32) temp_v0->wayPointY; - var_s0->actorIndex = -1; - var_s0->wayPointIndex = (s16) temp_hi; - var_s0->unused = 0; - var_s0->velocity[0] = 0.0f; - var_s0->velocity[1] = 0.0f; - var_s0->velocity[2] = 0.0f; - var_s0->someFlags = 0; - var_s0->someFlagsTheSequel = 0; - var_s0->position[2] = (f32) temp_v0->wayPointZ; - if (gModeSelection == TIME_TRIALS) { - var_s0->someType = (s16) (var_s3 % 3); + s32 i; + u16 waypointOffset; + s32 numWaypoints = gWaypointCountByPathIndex[0]; + for (i = 0; i < arg2; i++) { + waypointOffset = (((i * numWaypoints) / arg2) + arg3) % numWaypoints; + veh = &vehicle[i]; + temp_v0 = &wayPointList[waypointOffset]; + veh->position[0] = (f32) temp_v0->wayPointX; + veh->position[1] = (f32) temp_v0->wayPointY; + veh->position[2] = (f32) temp_v0->wayPointZ; + veh->actorIndex = -1; + veh->wayPointIndex = waypointOffset; + veh->unused = 0; + veh->velocity[0] = 0.0f; + veh->velocity[1] = 0.0f; + veh->velocity[2] = 0.0f; + veh->someFlags = 0; + veh->someFlagsTheSequel = 0; + if (gModeSelection == 1) { + veh->someType = (i % 3); } else { - var_s0->someType = random_int(3U); + veh->someType = random_int(3); } - temp_v0_2 = var_s0->someType; - var_s0->someMultiplierTheSequel = (f32) ((f64) (f32) (temp_v0_2 - 1) * 0.6); - if (((gCCSelection > 0) || (gModeSelection == TIME_TRIALS)) && (temp_v0_2 == 2)) { - var_s0->someMultiplier = arg0; + veh->someMultiplierTheSequel = (f32) ((f64) (f32) (veh->someType - 1) * 0.6); + if (((gCCSelection > 0) || (gModeSelection == 1)) && (veh->someType == 2)) { + veh->someMultiplier = arg0; } else { - var_s0->someMultiplier = arg1; + veh->someMultiplier = arg1; } - var_s0->rotation[0] = 0; - var_s0->rotation[2] = 0; + veh->rotation[0] = 0; + veh->rotation[2] = 0; if (D_8016347A == 0) { - var_v0 = func_8000D6D0(var_s1, var_s2, var_s0->someMultiplier, var_s0->someMultiplierTheSequel, 0, 3); + veh->rotation[1] = func_8000D6D0(veh->position, &veh->wayPointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0, 3); } else { - var_v0 = func_8000D940(var_s1, var_s2, var_s0->someMultiplier, var_s0->someMultiplierTheSequel, 0); + veh->rotation[1] = func_8000D940(veh->position, &veh->wayPointIndex, veh->someMultiplier, veh->someMultiplierTheSequel, 0); } - var_s0->rotation[1] = var_v0; - var_s3 += 1; - var_s4 += temp_s7; - var_s0 += 0x34; - var_s1 += 0x34; - var_s2 += 0x34; - } while (var_s3 != arg2); - } - D_801631C8 = 0x000A; + } + D_801631C8 = 10; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800139E4.s") -#endif f32 func_80013C74(s16 arg0, s16 arg1) { f32 var_f2; var_f2 = 0.0f; if (arg1 < 0x28A) { - switch (arg0) { /* switch 1; irregular */ - case 0: /* switch 1 */ + switch (arg0) { + case 0: var_f2 = -0.7f; break; - case 1: /* switch 1 */ + case 1: break; - case 2: /* switch 1 */ + case 2: var_f2 = 0.7f; break; - default: /* switch 1 */ + default: break; } } else { - switch (arg0) { /* irregular */ + switch (arg0) { case 0: case 1: var_f2 = -0.5f; @@ -6625,29 +6553,29 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80013F7C.s") f32 func_800145A8(s16 arg0, f32 arg1, s16 arg2) { if (arg2 < 0x28A) { - switch (arg0) { /* switch 1; irregular */ - case 0: /* switch 1 */ + switch (arg0) { + case 0: if (arg1 < 0.0) { arg1 = 0.0f; } break; - case 1: /* switch 1 */ + case 1: if (arg1 < 0.0) { arg1 = -0.8f; } else { arg1 = 0.8f; } break; - case 2: /* switch 1 */ + case 2: if (arg1 >= 0.0) { arg1 = 0.0f; } break; - default: /* switch 1 */ + default: break; } } else { - switch (arg0) { /* irregular */ + switch (arg0) { case 0: case 1: arg1 = 0.5f; @@ -6703,25 +6631,15 @@ loop_4: GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800146B8.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_800139E4(f32 arg0, f32 arg1, s32 arg2, f32 arg3, VehicleStuff *arg4, struct TrackWayPoint *arg5); -extern f64 D_800ED1B8; -extern f64 D_800ED1C0; -extern f64 D_800ED1C8; -extern s32 gBoxTruckList; void func_800147E0(void) { - f64 temp_f0 = (gCCSelection * D_800ED1B8) / 216.0; - s32 phi_a2 = NUM_RACE_BOX_TRUCKS; - + f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; + f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; + s32 numTrucks = NUM_RACE_BOX_TRUCKS; if (gModeSelection == TIME_TRIALS) { - phi_a2 = NUM_TIME_TRIAL_BOX_TRUCKS; + numTrucks = NUM_TIME_TRIAL_BOX_TRUCKS; } - func_800139E4(temp_f0 + D_800ED1C0, temp_f0 + D_800ED1C8, phi_a2, 0, &gBoxTruckList, D_80164550); + func_800139E4(a, b, numTrucks, 0, &gBoxTruckList, &D_80164550[0][0]); } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800147E0.s") -#endif void func_8001487C(void) { s32 loopIndex; @@ -6738,28 +6656,17 @@ void func_8001490C(s32 playerId) { func_800146B8(playerId, NUM_RACE_BOX_TRUCKS, gBoxTruckList); } -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_800139E4(f32, f32, ?, ?, ? *, s16 *); // extern -extern f64 D_800ED1D0; -extern f64 D_800ED1D8; -extern f64 D_800ED1E0; -extern VehicleStuff gSchoolBusList; - void func_80014934(void) { - f64 temp_f0; - ? phi_a2; + s32 numBusses; + f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; + f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; - temp_f0 = (gCCSelection * D_800ED1D0) / 216.0; - phi_a2 = NUM_RACE_SCHOOL_BUSES; + numBusses = NUM_RACE_SCHOOL_BUSES; if (gModeSelection == TIME_TRIALS) { - phi_a2 = NUM_TIME_TRIAL_SCHOOL_BUSES; + numBusses = NUM_TIME_TRIAL_SCHOOL_BUSES; } - func_800139E4(temp_f0 + D_800ED1D8, temp_f0 + D_800ED1E0, phi_a2, 0x4B, &gSchoolBusList, D_80164550); + func_800139E4(a, b, numBusses, 0x4B, &gSchoolBusList, &D_80164550[0][0]); } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80014934.s") -#endif void func_800149D0(void) { s32 loopIndex; @@ -6776,28 +6683,17 @@ void func_80014A60(s32 playerId) { func_800146B8(playerId, NUM_RACE_SCHOOL_BUSES, gSchoolBusList); } -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_800139E4(f32, f32, ?, ?, ? *, s16 *); // extern -extern f64 D_800ED1E8; -extern f64 D_800ED1F0; -extern f64 D_800ED1F8; -extern VehicleStuff gTankerTruckList; - void func_80014A88(void) { - f64 temp_f0; - ? phi_a2; + s32 numTrucks; + f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; + f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; - temp_f0 = (gCCSelection * D_800ED1E8) / 216.0; - phi_a2 = NUM_RACE_TANKER_TRUCKS; + numTrucks = NUM_RACE_TANKER_TRUCKS; if (gModeSelection == TIME_TRIALS) { - phi_a2 = NUM_TIME_TRIAL_TANKER_TRUCKS; + numTrucks = NUM_TIME_TRIAL_TANKER_TRUCKS; } - func_800139E4(temp_f0 + D_800ED1F0, temp_f0 + D_800ED1F8, phi_a2, 0x32, &gTankerTruckList, D_80164550); + func_800139E4(a, b, numTrucks, 50, &gTankerTruckList, &D_80164550[0][0]); } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80014A88.s") -#endif void func_80014B24(void) { s32 loopIndex; @@ -6814,28 +6710,17 @@ void func_80014BB4(s32 playerId) { func_800146B8(playerId, NUM_RACE_TANKER_TRUCKS, gTankerTruckList); } -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_800139E4(f32, f32, ?, ?, ? *, s16 *); // extern -extern f64 D_800ED200; -extern f64 D_800ED208; -extern f64 D_800ED210; -extern VehicleStuff gCarList; - void func_80014BDC(void) { - f64 temp_f0; - ? phi_a2; + s32 numCars; + f32 a = ((gCCSelection * 90.0) / 216.0f) + 4.583333333333333; + f32 b = ((gCCSelection * 90.0) / 216.0f) + 2.9166666666666665; - temp_f0 = (gCCSelection * D_800ED200) / 216.0; - phi_a2 = NUM_RACE_CARS; + numCars = NUM_RACE_CARS; if (gModeSelection == TIME_TRIALS) { - phi_a2 = NUM_TIME_TRIAL_CARS; + numCars = NUM_TIME_TRIAL_CARS; } - func_800139E4(temp_f0 + D_800ED208, temp_f0 + D_800ED210, phi_a2, 0x19, &gCarList, D_80164550); + func_800139E4(a, b, numCars, 25, &gCarList, &D_80164550[0][0]); } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80014BDC.s") -#endif void func_80014C78(void) { s32 loopIndex; @@ -6866,7 +6751,7 @@ void func_80014D30(s32 cameraId, s32 pathIndex) { extern s32 D_80163238; extern s16 gNearestWaypointByCameraId; extern s16 D_80164670[]; -//extern s16 D_80164678; + extern s16 D_80164680; extern ? D_801646C0; extern s32 D_801646C8; @@ -6917,7 +6802,6 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80014DE4.s") #ifdef MIPS_TO_C //generated by m2c commit bece1d6db17040749f77dbbd090363cc6fb926f9 extern ? D_80164498; -extern s16 D_80164678; f32 func_80014EE4(f32 arg0, s32 arg1) { f32 temp_f0; @@ -7073,7 +6957,7 @@ UNUSED void func_8001530C(void) { } -void func_80015314(s32 playerId, UNUSED s32 arg1, s32 cameraId) { +void func_80015314(s32 playerId, UNUSED f32 arg1, s32 cameraId) { Camera *temp_a0; Player *temp_a1; @@ -7134,69 +7018,46 @@ void func_80015390(Camera *camera, UNUSED Player *player, UNUSED s32 arg2) { camera->rot[2] = 0; } -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(f32, s32, f32, s16); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164688; +void func_8000BBD8(u16, f32, s16); /* extern */ +f32 func_802AE1C0(f32,f32,f32); +extern f32 D_80162FA0[]; +extern f32 D_801645F8[]; +extern f32 D_80164618[]; +extern f32 D_80164638[]; +extern f32 D_80164648[]; +extern f32 D_80164688[]; +void func_80015544(s32 playerId, f32 arg1, s32 cameraId, s32 pathIndex) { + Camera* camera; -void func_80015544(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp2C; - s16 *sp28; - f32 *sp24; - f32 *sp20; - f64 sp18; - Camera *temp_v0; - f32 *temp_a0; - f32 *temp_a1; - f32 *var_v1; - f32 temp_f0; f32 temp_f12; - f64 temp_f12_2; - f64 temp_f2; - s16 *temp_v1; - s32 temp_hi; - s32 temp_t7; + f32 temp_f2; + s32 test = gWaypointCountByPathIndex[pathIndex]; + + + D_80164688[cameraId] = arg1; + camera = cameras + cameraId; + gNearestWaypointByCameraId[cameraId] = (gNearestWaypointByPlayerId[playerId] + 10) % test; + + func_8000BBD8(gNearestWaypointByCameraId[cameraId], arg1, pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164638[cameraId] = D_80162FA0[2]; - temp_t7 = cameraId * 4; - temp_hi = (s32) (gNearestWaypointByPlayerId[playerId] + 0xA) % (s32) gWaypointCountByPathIndex[pathIndex]; - *(&D_80164688 + temp_t7) = arg1; - temp_v1 = &gNearestWaypointByCameraId[cameraId]; - *temp_v1 = (s16) temp_hi; - sp28 = temp_v1; - sp2C = temp_t7; - func_8000BBD8(arg1, temp_hi & 0xFFFF, arg1, pathIndex); - temp_f12 = D_80162FA0.unk0; - temp_f0 = D_80162FA0.unk8; - temp_a0 = temp_t7 + &D_801645F8; - temp_a1 = temp_t7 + &D_80164638; - *temp_a0 = temp_f12; - *temp_a1 = temp_f0; - sp20 = temp_a1; - sp24 = temp_a0; - temp_f2 = (f64) (f32) D_80164550[(s32) pathIndex][*temp_v1].wayPointY; - sp18 = temp_f2; - temp_f12_2 = (f64) func_802AE1C0(temp_f12, (f32) (temp_f2 + 30.0), temp_f0); - if ((temp_f12_2 < (temp_f2 - 20.0)) || (temp_f12_2 >= 3000.0)) { - var_v1 = temp_t7 + &D_80164618; - *var_v1 = (f32) (temp_f2 + 10.0); + temp_f2 = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + + temp_f12 = func_802AE1C0(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]); + if ((temp_f12 < (temp_f2 - 20.0)) || (temp_f12 >= 3000.0)) { + D_80164618[cameraId] = (f32) (temp_f2 + 10.0); } else { - var_v1 = temp_t7 + &D_80164618; - *var_v1 = (f32) (temp_f12_2 + 10.0); + D_80164618[cameraId] = (f32) (temp_f12 + 10.0); } - *(&D_80164648 + temp_t7) = 0.0f; - temp_v0 = &cameras[cameraId]; - temp_v0->pos[0] = *temp_a0; - temp_v0->pos[1] = *var_v1; - temp_v0->pos[2] = *temp_a1; + D_80164648[cameraId] = 0.0f; + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80015544.s") -#endif + + #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -7294,63 +7155,28 @@ block_10: GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001577C.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(f32, s32, f32, s16, s16); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164688; - void func_80015A9C(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp20; - s16 *sp1C; - Camera *temp_v0; - f32 *temp_a0; - f32 *temp_a1; - f32 *temp_a2_2; - f32 *temp_t0; - f32 temp_f0; - s16 *temp_v1; - s16 temp_a2; - s16 temp_a3; - s32 temp_t3; - s32 temp_t8; + Camera* camera = cameras + cameraId; + + D_80164688[cameraId] = arg1; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByPlayerId[playerId] + 10; + gNearestWaypointByCameraId[cameraId] = (gNearestWaypointByCameraId[cameraId]) % gWaypointCountByPathIndex[pathIndex]; + + func_8000BBD8(gNearestWaypointByCameraId[cameraId], arg1, pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164618[cameraId] = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + D_80164638[cameraId] = D_80162FA0[2]; - temp_a3 = pathIndex; - temp_t8 = cameraId * 4; - temp_v1 = &gNearestWaypointByCameraId[cameraId]; - *(&D_80164688 + temp_t8) = arg1; - *temp_v1 = gNearestWaypointByPlayerId[playerId] + 0xA; - temp_t3 = (s16) *temp_v1 % (s32) gWaypointCountByPathIndex[temp_a3]; - *temp_v1 = (s16) temp_t3; - temp_a2 = temp_a3; - sp20 = temp_t8; - sp1C = temp_v1; - pathIndex = temp_a3; - func_8000BBD8(arg1, temp_t3 & 0xFFFF, arg1, temp_a2, temp_a3); - temp_a0 = temp_t8 + &D_801645F8; - *temp_a0 = D_80162FA0.unk0; - temp_a1 = temp_t8 + &D_80164618; - temp_a2_2 = temp_t8 + &D_80164638; - *temp_a1 = (f32) D_80164550[pathIndex][*temp_v1].wayPointY; - *temp_a2_2 = D_80162FA0.unk8; - temp_f0 = *(&gPlayers->unk_094 + (playerId * 0xDD8)) / 5.0f; - temp_t0 = temp_t8 + &D_80164648; - *temp_t0 = temp_f0; - if ((f64) temp_f0 < 0.0) { - *temp_t0 = 0.0f; - } - temp_v0 = &cameras[cameraId]; - temp_v0->pos[0] = *temp_a0; - temp_v0->pos[1] = *temp_a1; - temp_v0->pos[2] = *temp_a2_2; + D_80164648[cameraId] = gPlayers[playerId].unk_094 / 5.0f; + if ((f64) D_80164648[cameraId] < 0.0) { + D_80164648[cameraId] = 0.0f; + } + + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80015A9C.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -7528,60 +7354,28 @@ block_8: GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80015C94.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(f32, s32, f32, s16, s16); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164658; -extern ? D_80164688; +extern f32 D_80164658[]; void func_800162CC(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp20; - s16 *sp1C; - Camera *temp_v0; - f32 *temp_a0; - f32 *temp_a1; - f32 temp_f0; - f32 temp_f2; - s16 *temp_t0; - s16 temp_a2; - s16 temp_a3; - s32 temp_t8; - s32 temp_t9; + Camera* camera = cameras + cameraId; - temp_t8 = cameraId * 4; - temp_a3 = pathIndex; - temp_t0 = &gNearestWaypointByCameraId[cameraId]; - *(&D_80164688 + temp_t8) = arg1; - *temp_t0 = (s16) gNearestWaypointByPlayerId[playerId]; - temp_t9 = (s16) *temp_t0 % (s32) gWaypointCountByPathIndex[pathIndex]; - *temp_t0 = (s16) temp_t9; - temp_a2 = temp_a3; - sp1C = temp_t0; - sp20 = temp_t8; - pathIndex = temp_a3; - func_8000BBD8(arg1, temp_t9 & 0xFFFF, arg1, temp_a2, temp_a3); - temp_f0 = D_80162FA0.unk0; - *(&D_801645F8 + temp_t8) = temp_f0; - temp_a0 = temp_t8 + &D_80164618; - temp_a1 = temp_t8 + &D_80164638; - *temp_a0 = (f32) D_80164550[pathIndex][*temp_t0].wayPointY; - *temp_a1 = D_80162FA0.unk8; - temp_f2 = *(&gPlayers->unk_094 + (playerId * 0xDD8)); - *(&D_80164658 + temp_t8) = temp_f2; - temp_v0 = &cameras[cameraId]; - *(&D_80164648 + temp_t8) = temp_f2; - temp_v0->pos[0] = temp_f0; - temp_v0->pos[1] = *temp_a0; - temp_v0->pos[2] = *temp_a1; + D_80164688[cameraId] = arg1; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByPlayerId[playerId]; + gNearestWaypointByCameraId[cameraId] = (gNearestWaypointByCameraId[cameraId]) % gWaypointCountByPathIndex[pathIndex]; + + func_8000BBD8(gNearestWaypointByCameraId[cameraId], arg1, pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164618[cameraId] = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + D_80164638[cameraId] = D_80162FA0[2]; + + D_80164658[cameraId] = gPlayers[playerId].unk_094; + D_80164648[cameraId] = gPlayers[playerId].unk_094; + + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800162CC.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -8085,62 +7879,27 @@ void func_80017054(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80017054.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(s32, f32, s16, s16); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164658; -extern ? D_80164688; +void func_80017720(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { + Camera* camera = cameras + cameraId; + s32 pad; -void func_80017720(s32 playerId, s32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp1C; - s16 *sp18; - Camera *temp_v0; - f32 *temp_a0; - f32 *temp_a1; - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f2; - s16 *temp_t0; - s16 temp_a2; - s16 temp_a3; - s32 temp_t3; - s32 temp_t8; + D_80164688[cameraId] = D_80163068[playerId]; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByPlayerId[playerId] + 3; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByCameraId[cameraId] % gWaypointCountByPathIndex[pathIndex]; - temp_a3 = pathIndex; - temp_f0 = D_80163068[playerId]; - temp_t8 = cameraId * 4; - temp_t0 = &gNearestWaypointByCameraId[cameraId]; - *(&D_80164688 + temp_t8) = temp_f0; - *temp_t0 = gNearestWaypointByPlayerId[playerId] + 3; - temp_t3 = (s16) *temp_t0 % (s32) gWaypointCountByPathIndex[temp_a3]; - *temp_t0 = (s16) temp_t3; - temp_a2 = temp_a3; - sp18 = temp_t0; - sp1C = temp_t8; - pathIndex = temp_a3; - func_8000BBD8(temp_t3 & 0xFFFF, temp_f0, temp_a2, temp_a3); - temp_f0_2 = D_80162FA0.unk0; - *(&D_801645F8 + temp_t8) = temp_f0_2; - temp_a0 = temp_t8 + &D_80164618; - temp_a1 = temp_t8 + &D_80164638; - *temp_a0 = (f32) D_80164550[pathIndex][*temp_t0].wayPointY; - *temp_a1 = D_80162FA0.unk8; - temp_f2 = *(&gPlayers->unk_094 + (playerId * 0xDD8)); - *(&D_80164658 + temp_t8) = temp_f2; - temp_v0 = &cameras[cameraId]; - *(&D_80164648 + temp_t8) = temp_f2; - temp_v0->pos[0] = temp_f0_2; - temp_v0->pos[1] = *temp_a0; - temp_v0->pos[2] = *temp_a1; + func_8000BBD8(gNearestWaypointByCameraId[cameraId], D_80163068[playerId], pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164618[cameraId] = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + D_80164638[cameraId] = D_80162FA0[2]; + + D_80164658[cameraId] = gPlayers[playerId].unk_094; + D_80164648[cameraId] = gPlayers[playerId].unk_094; + + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80017720.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -8314,64 +8073,27 @@ void func_800178F4(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800178F4.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(s32, f32, s16, s16); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164658; -extern ? D_80164688; +void func_80017F10(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { + Camera* camera = cameras + cameraId; + s32 test = gWaypointCountByPathIndex[pathIndex]; -void func_80017F10(s32 playerId, s32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp1C; - s16 *sp18; - Camera *temp_v0_2; - f32 *temp_a0; - f32 *temp_a1; - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f2; - s16 *temp_t0; - s16 temp_a2; - s16 temp_a3; - s32 temp_t3; - s32 temp_t9; - u16 temp_v0; + D_80164688[cameraId] = D_80163068[playerId]; + gNearestWaypointByCameraId[cameraId] = (gNearestWaypointByPlayerId[playerId] + test) - 2; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByCameraId[cameraId] % test; - temp_a3 = pathIndex; - temp_v0 = gWaypointCountByPathIndex[pathIndex]; - temp_f0 = D_80163068[playerId]; - temp_t9 = cameraId * 4; - temp_t0 = &gNearestWaypointByCameraId[cameraId]; - *(&D_80164688 + temp_t9) = temp_f0; - *temp_t0 = (gNearestWaypointByPlayerId[playerId] + temp_v0) - 2; - temp_t3 = (s16) *temp_t0 % (s32) temp_v0; - *temp_t0 = (s16) temp_t3; - temp_a2 = temp_a3; - sp18 = temp_t0; - sp1C = temp_t9; - pathIndex = temp_a3; - func_8000BBD8(temp_t3 & 0xFFFF, temp_f0, temp_a2, temp_a3); - temp_f0_2 = D_80162FA0.unk0; - *(&D_801645F8 + temp_t9) = temp_f0_2; - temp_a0 = temp_t9 + &D_80164618; - temp_a1 = temp_t9 + &D_80164638; - *temp_a0 = (f32) D_80164550[pathIndex][*temp_t0].wayPointY; - *temp_a1 = D_80162FA0.unk8; - temp_f2 = *(&gPlayers->unk_094 + (playerId * 0xDD8)); - *(&D_80164658 + temp_t9) = temp_f2; - temp_v0_2 = &cameras[cameraId]; - *(&D_80164648 + temp_t9) = temp_f2; - temp_v0_2->pos[0] = temp_f0_2; - temp_v0_2->pos[1] = *temp_a0; - temp_v0_2->pos[2] = *temp_a1; + func_8000BBD8(gNearestWaypointByCameraId[cameraId], D_80163068[playerId], pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164618[cameraId] = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + D_80164638[cameraId] = D_80162FA0[2]; + + D_80164658[cameraId] = gPlayers[playerId].unk_094; + D_80164648[cameraId] = gPlayers[playerId].unk_094; + + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80017F10.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -8548,63 +8270,28 @@ void func_800180F0(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800180F0.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BA14(s32, f32, ?, s16); /* extern */ -extern f32 D_80162FA0; extern s32 D_8016448C; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164658; -extern ? D_80164688; -void func_80018718(s32 playerId, s32 arg1, s32 cameraId, s16 pathIndex) { - s32 sp1C; - s16 *sp18; - Camera *temp_v0_2; - f32 *temp_a0; - f32 *temp_a1; - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f2; - s16 *temp_t0; - s16 temp_a3; - s32 temp_hi; - s32 temp_t9; - u16 temp_v0; +void func_80018718(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { + Camera* camera = cameras + cameraId; + s32 test = gWaypointCountByPathIndex[pathIndex]; - temp_a3 = pathIndex; - temp_v0 = gWaypointCountByPathIndex[pathIndex]; - temp_f0 = D_80163068[playerId]; - temp_t9 = cameraId * 4; - temp_hi = (s32) ((gNearestWaypointByPlayerId[playerId] + temp_v0) - 5) % (s32) temp_v0; - *(&D_80164688 + temp_t9) = temp_f0; - temp_t0 = &gNearestWaypointByCameraId[cameraId]; - *temp_t0 = (s16) temp_hi; - sp18 = temp_t0; - sp1C = temp_t9; - pathIndex = temp_a3; - func_8000BA14(temp_hi & 0xFFFF, temp_f0, 0x42700000, temp_a3); - temp_f0_2 = D_80162FA0.unk0; - *(&D_801645F8 + temp_t9) = temp_f0_2; - temp_a0 = temp_t9 + &D_80164618; - temp_a1 = temp_t9 + &D_80164638; - *temp_a0 = (f32) D_80164550[pathIndex][*temp_t0].wayPointY; - *temp_a1 = D_80162FA0.unk8; - temp_f2 = *(&gPlayers->unk_094 + (playerId * 0xDD8)); - *(&D_80164658 + temp_t9) = temp_f2; - *(&D_80164648 + temp_t9) = temp_f2; + D_80164688[cameraId] = D_80163068[playerId]; + gNearestWaypointByCameraId[cameraId] = ((gNearestWaypointByPlayerId[playerId] + test) - 5) % test; + + func_8000BA14(gNearestWaypointByCameraId[cameraId], D_80163068[playerId], 60.0f, pathIndex); + + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164618[cameraId] = (f32) D_80164550[pathIndex][gNearestWaypointByCameraId[cameraId]].wayPointY; + D_80164638[cameraId] = D_80162FA0[2]; + + D_80164658[cameraId] = gPlayers[playerId].unk_094; + D_80164648[cameraId] = gPlayers[playerId].unk_094; D_8016448C = 1; - temp_v0_2 = &cameras[cameraId]; - temp_v0_2->pos[0] = temp_f0_2; - temp_v0_2->pos[1] = *temp_a0; - temp_v0_2->pos[2] = *temp_a1; + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80018718.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -8833,70 +8520,34 @@ void func_800188F4(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800188F4.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_8000BBD8(f32, s32, f32, ?, s32); /* extern */ -extern f32 D_80162FA0; -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern ? D_80164688; - -void func_80019118(s32 playerId, f32 arg1, s32 cameraId, s32 arg3) { - s32 sp2C; - s16 *sp28; - f32 *sp24; - f32 *sp20; - f64 sp18; - Camera *temp_v0_2; - f32 *temp_a0; - f32 *temp_a1; - f32 *var_v1; - f32 temp_f0; +void func_80019118(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { + Camera* camera = cameras + cameraId; + s32 test = gWaypointCountByPathIndex[0]; f32 temp_f12; - f64 temp_f12_2; - f64 temp_f2; - s16 *temp_v0; - s32 temp_t5; - s32 temp_t6; + f32 temp_f2; - temp_t6 = cameraId * 4; - temp_v0 = &gNearestWaypointByCameraId[cameraId]; - *(&D_80164688 + temp_t6) = arg1; - *temp_v0 = gNearestWaypointByPlayerId[playerId] + 0xC; - temp_t5 = (s16) *temp_v0 % (s32) *gWaypointCountByPathIndex; - *temp_v0 = (s16) temp_t5; - sp2C = temp_t6; - sp28 = temp_v0; - func_8000BBD8(arg1, temp_t5 & 0xFFFF, arg1, 0, temp_t6); - temp_f12 = D_80162FA0.unk0; - temp_f0 = D_80162FA0.unk8; - temp_a0 = temp_t6 + &D_801645F8; - temp_a1 = temp_t6 + &D_80164638; - *temp_a0 = temp_f12; - *temp_a1 = temp_f0; - sp20 = temp_a1; - sp24 = temp_a0; - temp_f2 = (f64) (f32) (*D_80164550)[*temp_v0].wayPointY; - sp18 = temp_f2; - temp_f12_2 = (f64) func_802AE1C0(temp_f12, (f32) (temp_f2 + 30.0), temp_f0); - if ((temp_f12_2 < (temp_f2 - 20.0)) || (temp_f12_2 >= 3000.0)) { - var_v1 = temp_t6 + &D_80164618; - *var_v1 = (f32) (temp_f2 + 10.0); + D_80164688[cameraId] = arg1; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByPlayerId[playerId] + 12; + gNearestWaypointByCameraId[cameraId] = gNearestWaypointByCameraId[cameraId] % test; + + + func_8000BBD8(gNearestWaypointByCameraId[cameraId], arg1, 0); + D_801645F8[cameraId] = D_80162FA0[0]; + D_80164638[cameraId] = D_80162FA0[2]; + temp_f2 = (f32) D_80164550[0][gNearestWaypointByCameraId[cameraId]].wayPointY; + + temp_f12 = func_802AE1C0(D_80162FA0[0], (f32) (temp_f2 + 30.0), D_80162FA0[2]); + + if ((temp_f12 < (temp_f2 - 20.0)) || (temp_f12 >= 3000.0)) { + D_80164618[cameraId] = (f32) (temp_f2 + 10.0); } else { - var_v1 = temp_t6 + &D_80164618; - *var_v1 = (f32) (temp_f12_2 + 10.0); + D_80164618[cameraId] = (f32) (temp_f12 + 10.0); } - *(&D_80164648 + temp_t6) = 0.0f; - temp_v0_2 = &cameras[cameraId]; - temp_v0_2->pos[0] = *temp_a0; - temp_v0_2->pos[1] = *var_v1; - temp_v0_2->pos[2] = *temp_a1; + D_80164648[cameraId] = 0.0f; + camera->pos[0] = D_801645F8[cameraId]; + camera->pos[1] = D_80164618[cameraId]; + camera->pos[2] = D_80164638[cameraId]; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019118.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -8990,32 +8641,20 @@ void func_8001968C(void) { D_80164678[0] = 3; } -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -extern ? D_801645F8; -extern ? D_80164618; -extern ? D_80164638; -extern ? D_80164648; -extern s16 D_80164678; +void func_8001969C(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) { + struct TrackWayPoint *waypoint; -void func_8001969C(s32 arg0, s32 arg1, s32 cameraId, s32 arg3) { - s16 *temp_v1; - s32 temp_a1; - struct TrackWayPoint *temp_a0; + gNearestWaypointByCameraId[cameraId] = gWaypointCountByPathIndex[0] - 18; - temp_v1 = &gNearestWaypointByCameraId[cameraId]; - *temp_v1 = *gWaypointCountByPathIndex - 0x12; - temp_a0 = &(*D_80164550)[*temp_v1]; - temp_a1 = cameraId * 4; - *(&D_801645F8 + temp_a1) = (f32) temp_a0->wayPointX; - *(&D_80164618 + temp_a1) = (f32) ((f64) temp_a0->wayPointY + 10.0); - *(&D_80164638 + temp_a1) = (f32) temp_a0->wayPointZ; - *(&D_80164648 + temp_a1) = 0.0f; - *(&D_80164678 + (cameraId * 2)) = 0; + waypoint = &D_80164550[0][gNearestWaypointByCameraId[cameraId]]; + + D_801645F8[cameraId] = waypoint->wayPointX; + // @bug Adding an (f32) cast changes asm, why? + D_80164618[cameraId] = waypoint->wayPointY + 10.0; + D_80164638[cameraId] = waypoint->wayPointZ; + D_80164648[cameraId] = 0.0f; + D_80164678[cameraId] = 0; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001969C.s") -#endif #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de @@ -9055,103 +8694,83 @@ void func_80019760(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019760.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_80015314(?, s32); /* extern */ -void func_80015544(?, s32, u16); /* extern */ -void func_80015A9C(?, s32, s16); /* extern */ -void func_800162CC(?, s32, s16); /* extern */ -void func_80016C3C(?, s32); /* extern */ -void func_80017720(?, s32, s16); /* extern */ -void func_80017F10(?, s32, s16); /* extern */ -void func_80018718(?, s32, s16); /* extern */ -void func_80019118(?, s32, s16); /* extern */ -void func_8001969C(?, s32, s16); /* extern */ -extern ? D_80163DD8; -extern s16 D_80164680; -extern ? D_801646C0; - -void func_80019890(s16 playerId, s32 cameraId) { - Camera *sp28; - s32 sp24; - u16 *sp20; - Camera *temp_t6; - Camera *temp_t9; - s32 temp_t0; - u16 *temp_t4; - u16 temp_s1; - u16 temp_t5; - - temp_t6 = camera1; - sp28 = temp_t6; - temp_t9 = &temp_t6[cameraId]; - sp28 = temp_t9; - temp_t9->playerId = playerId; - temp_t0 = cameraId * 2; - temp_t4 = temp_t0 + &D_80164680; - *(&D_801646C0 + temp_t0) = 0; - sp24 = temp_t0; - sp20 = temp_t4; - temp_t5 = *temp_t4; - temp_s1 = gPathIndexByPlayerId[playerId]; - switch (temp_t5) { - case 0: - func_80015314(0, cameraId); - break; - case 2: - func_80015544(0xBF800000, cameraId, temp_s1); - break; - case 3: - func_80015544(0x3F800000, cameraId, temp_s1); - break; - case 6: - func_80015A9C(0xBF19999A, cameraId, (s16) temp_s1); - break; - case 7: - func_80015A9C(0x3F19999A, cameraId, (s16) temp_s1); - break; - case 4: - func_800162CC(0xBF800000, cameraId, (s16) temp_s1); - break; - case 5: - func_800162CC(0x3F800000, cameraId, (s16) temp_s1); - break; - case 9: - func_80016C3C(0, cameraId); - break; - case 1: - func_80017720(0, cameraId, (s16) temp_s1); - break; - case 14: - func_80017F10(0, cameraId, (s16) temp_s1); - break; - case 8: - func_80018718(0, cameraId, (s16) temp_s1); - break; - case 12: - func_80019118(0xBF800000, cameraId, (s16) temp_s1); - break; - case 13: - func_80019118(0x3F800000, cameraId, (s16) temp_s1); - break; - case 15: - func_8001969C(0xBF800000, cameraId, (s16) temp_s1); - break; - case 16: - func_8001969C(0x3F800000, cameraId, (s16) temp_s1); - break; - default: - func_80015314(0, cameraId); - break; +void func_80016C3C(s32, f32, s32); +void func_80015314(s32, f32, s32); +void func_80017720(s32, f32, s32, s16); +void func_80017F10(s32, f32, s32, s16); +void func_80018718(s32, f32, s32, s16); +void func_80015544(s32, f32, s32, s32); +void func_80019118(s32, f32, s32, s16); +void func_800162CC(s32, f32, s32, s16); +void func_80015A9C(s32, f32, s32, s16); +extern s32 D_80163DD8[]; +extern s16 D_80164680[]; +extern s16 D_801646C0[]; + +void func_80019890(s32 playerId, s32 cameraId) { + s32 pathIndex; + Camera *camera = camera1; + camera += cameraId; + camera->playerId = playerId; + + D_801646C0[cameraId] = 0; + pathIndex = gPathIndexByPlayerId[playerId]; + + switch (D_80164680[cameraId]) { + case 0: + func_80015314(playerId, 0.0f, cameraId); + break; + case 2: + func_80015544(playerId, -1.0f, cameraId, pathIndex); + break; + case 3: + func_80015544(playerId, 1.0f, cameraId, pathIndex); + break; + case 6: + func_80015A9C(playerId, -0.6f, cameraId, (s16) pathIndex); + break; + case 7: + func_80015A9C(playerId, 0.6f, cameraId, (s16) pathIndex); + break; + case 4: + func_800162CC(playerId, -1.0f, cameraId, (s16) pathIndex); + break; + case 5: + func_800162CC(playerId, 1.0f, cameraId, (s16) pathIndex); + break; + case 9: + func_80016C3C(playerId, 0.0f, cameraId); + break; + case 1: + func_80017720(playerId, 0.0f, cameraId, (s16) pathIndex); + break; + case 14: + func_80017F10(playerId, 0.0f, cameraId, (s16) pathIndex); + break; + case 8: + func_80018718(playerId, 0.0f, cameraId, (s16) pathIndex); + break; + case 12: + func_80019118(playerId, -1.0f, cameraId, (s16) pathIndex); + break; + case 13: + func_80019118(playerId, 1.0f, cameraId, (s16) pathIndex); + break; + case 15: + func_8001969C(playerId, -1.0f, cameraId, (s16) pathIndex); + break; + case 16: + func_8001969C(playerId, 1.0f, cameraId, (s16) pathIndex); + break; + default: + func_80015314(playerId, 0.0f, cameraId); + break; } - *(gNearestWaypointByCameraId + sp24) = func_8000BD94(sp28->pos[0], sp28->pos[1], sp28->pos[2], (s32) temp_s1); - if ((s16) *sp20 == 9) { - *(&D_80163DD8 + (cameraId * 4)) = (s32) temp_s1; + gNearestWaypointByCameraId[cameraId] = func_8000BD94(camera->pos[0], camera->pos[1], camera->pos[2], (s32) pathIndex); + if ((s16) D_80164680[cameraId] == 9) { + D_80163DD8[cameraId] = (s32) pathIndex; } } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019890.s") -#endif #ifdef MIPS_TO_C //generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 @@ -9221,7 +8840,6 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019B50.s") void func_800C9060(s32, ?, s32, s32); // extern extern ? D_80164608; extern s16 D_80164670; -extern s16 D_80164678; void func_80019C50(s32 arg0) { s32 sp20; @@ -9294,92 +8912,56 @@ void func_80019DE4(void) { #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -extern s16 D_80164670; -extern s16 D_80164678; -extern s16 D_8016467A; -extern s16 D_8016467C; -extern s16 D_8016467E; -extern s16 D_801646CC; +//extern s16 D_80164670; +//extern s16 D_8016467A; +//extern s16 D_8016467C; +//extern s16 D_8016467E; +//extern s16 D_801646CC; void func_80019DF4(void) { - D_80164670 = D_8016467E; - D_80164670 = D_8016467C; - D_80164670 = D_8016467A; - D_80164670 = D_80164678; + // unrolled loop? + D_80164670 = D_80164678[3]; + D_80164670 = D_80164678[2]; + D_80164670 = D_80164678[1]; + D_80164670 = D_80164678[0]; camera1->playerId = *gGPCurrentRacePlayerIdByRank; - D_80164678 = 1; + D_80164678[0] = 1; D_801646CC = 2; } #else GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019DF4.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -void func_80019890(?, ?); // extern -extern s16 D_80164670; -extern s16 D_80164672; -extern s16 D_80164678; -extern s16 D_80164680; extern s16 D_80164682; void func_80019E58(void) { - D_80164680 = 1; + D_80164680[0] = 1; func_80019890(0, 0); - D_80164670 = D_80164678.unk0; - D_80164678.unk0 = 1; + D_80164670[0] = D_80164678[0]; + D_80164678[0] = 1; D_80164682 = 9; func_80019890(0, 1); - D_80164672 = D_80164678.unk2; - D_80164678.unk2 = 0; + D_80164670[1] = D_80164678[1]; + D_80164678[1] = 0; } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019E58.s") -#endif - -#ifdef MIPS_TO_C -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_80015314(s32, ?, s32); /* extern */ -extern s16 D_80164670; -extern s16 D_80164678; -extern s16 D_80164680; -extern s32 gPlayerWinningIndex; void func_80019ED0(void) { - ? *var_v0; - s16 *var_s0; - s16 *var_s0_2; - s16 *var_s2; - s16 temp_t6; - s32 temp_v0; - s32 var_s1; + s32 i; - var_v0 = &D_80164670; - var_s0 = &D_80164678; - do { - temp_t6 = *var_s0; - var_s0 += 2; - var_v0 += 2; - var_v0->unk-2 = temp_t6; - } while ((u32) var_s0 < (u32) &D_80164680); - temp_v0 = gPlayerWinningIndex; - *gGPCurrentRacePlayerIdByRank = (s16) temp_v0; - var_s2 = &D_80164680; - var_s0_2 = &D_80164678; - var_s1 = 0; - camera1->playerId = (s16) temp_v0; - do { - *var_s2 = 0; - func_80015314(gPlayerWinningIndex, 0, var_s1); - var_s1 += 1; - var_s0_2 += 2; - var_s2 += 2; - var_s0_2->unk-2 = 1; - } while (var_s1 != 4); + for (i = 0; i < 4; i++) { + D_80164670[i] = D_80164678[i]; + } + + gGPCurrentRacePlayerIdByRank[0] = (s16) gPlayerWinningIndex; + + camera1->playerId = (s16) gPlayerWinningIndex; + + for (i = 0; i < 4; i++) { + D_80164680[i] = 0; + func_80015314(gPlayerWinningIndex, 0, i); + D_80164678[i] = 1; + } } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80019ED0.s") -#endif #ifdef MIPS_TO_C //generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 @@ -9478,47 +9060,33 @@ void func_8001A124(s32 arg0, s32 arg1) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001A124.s") #endif -#ifdef MIPS_TO_C -//generated by m2c commit 8267401fa4ef7a38942dcca43353cc1bcc6efabc -extern s16 D_80164680; +extern s16 D_80164680[]; void func_8001A220(s32 arg0, s32 arg1) { - s16 *var_at; - s16 var_t9; - u16 temp_v0; - - temp_v0 = random_int(6U); - switch (temp_v0) { - case 0: - *(&D_80164680 + (arg1 * 2)) = 4; - return; - case 1: - var_at = &D_80164680 + (arg1 * 2); - var_t9 = 5; -block_9: - *var_at = var_t9; - return; - case 2: - *(&D_80164680 + (arg1 * 2)) = 6; - return; - case 3: - *(&D_80164680 + (arg1 * 2)) = 7; - return; - case 4: - *(&D_80164680 + (arg1 * 2)) = 8; - return; - case 5: - *(&D_80164680 + (arg1 * 2)) = 1; - return; - default: - var_at = &D_80164680 + (arg1 * 2); - var_t9 = 8; - goto block_9; + switch (random_int(6)) { + case 0: + D_80164680[arg1] = 4; + break; + case 1: + D_80164680[arg1] = 5; + break; + case 2: + D_80164680[arg1] = 6; + break; + case 3: + D_80164680[arg1] = 7; + break; + case 4: + D_80164680[arg1] = 8; + break; + case 5: + D_80164680[arg1] = 1; + break; + default: + D_80164680[arg1] = 8; + break; } } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001A220.s") -#endif s32 func_8001A310(s32 arg0, s32 arg1) { if ((gCurrentCourseId == 2) && (arg1 != 0) && (arg0 >= 0xE7) && (arg0 < 0x1C2)) { @@ -9529,22 +9097,19 @@ s32 func_8001A310(s32 arg0, s32 arg1) { #ifdef MIPS_TO_C //generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de -void func_80019890(s32, s32); /* extern */ -s16 func_8001A310(f32, s16, s32, s32); /* extern */ -extern s16 D_80164680; -extern ? D_80164688; +//extern f32 D_80164688[]; void func_8001A348(s32 cameraId, f32 arg1, s32 arg2) { - s32 sp20; - s32 sp1C; - s32 temp_v1; + //s32 sp20; + //s32 sp1C; + //s32 temp_v1; - temp_v1 = cameraId * 2; - sp1C = temp_v1; - sp20 = (s32) *(&cameras->playerId + (cameraId * 0xB8)); - *(&D_80164688 + (cameraId * 4)) = arg1; - *(&D_80164680 + temp_v1) = func_8001A310(arg1, gNearestWaypointByCameraId[cameraId], arg2, cameraId); - func_80019890(sp20, cameraId); + //temp_v1 = cameraId * 2; + //sp1C = temp_v1; + //sp20 = (s32) cameras[1].playerId; // + (cameraId * 0xB8)); + D_80164688[cameraId] = arg1; + D_80164680[cameraId] = func_8001A310(arg1, gNearestWaypointByCameraId[cameraId]); + func_80019890(cameras[0].playerId, cameraId); } #else GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001A348.s") @@ -9853,39 +9418,38 @@ void func_8001AB00(void) { GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001AB00.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit bd0364fa19633bd6201f8007e2d0a7ed87825909 void func_8001AB74(s32 arg0, s16 *arg1, s32 arg2) { - s32 phi_v0; - - phi_v0 = -1; + s32 value = -1; switch (arg2) { - case 9: - phi_v0 = 0xD; - break; - case 11: - phi_v0 = 0x1B; - break; - case 1: - phi_v0 = 1; - break; - case 8: - phi_v0 = 0x16; - break; - case 10: - phi_v0 = 0x19; - break; - case 12: - phi_v0 = 0x1D; - break; + case 9: + value = 0xD; + break; + case 11: + value = 0x1B; + break; + case 1: + value = 1; + break; + case 8: + value = 0x16; + break; + case 10: + value = 0x19; + break; + case 12: + value = 0x1D; + break; + case 13: + break; + case 14: + break; + case 15: + break; } - if (phi_v0 >= 0) { - *arg1 = phi_v0; + if (value >= 0) { + *arg1 = value; } } -#else -GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001AB74.s") -#endif void func_8001ABE0(UNUSED s32 arg0, UNUSED s32 arg1) { @@ -10375,15 +9939,6 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001AC10.s") extern u16 D_80163410[]; // One per player? -typedef struct { - f32 unk0; - f32 unk4; - f32 unk8; - f32 unkC; -} Test; - -extern Test D_801634F8[]; - void func_8001BE78(void) { Player* temp_s1; struct TrackWayPoint* temp_s0; diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h index d0ea147e4..0e4d844aa 100644 --- a/src/code_80005FD0.h +++ b/src/code_80005FD0.h @@ -25,8 +25,23 @@ struct unexpiredActors { s32 unk18; }; -/* Function Prototypes */ +typedef struct { + f32 unk0; + f32 unk4; + f32 unk8; + f32 unkC; +} Test; + +extern Test D_801634F8[]; +/* Function Prototypes */ +void func_80012190(void); +void func_8000BA14(u16, f32, f32, s16); +void func_80014BDC(void); +void func_80014A88(void); +void func_80014934(void); +void func_800147E0(void); +void func_800132F4(void); s16 func_80005FD0(Vec3f, Vec3f); void func_800100F0(s32); void func_800120C8(void); @@ -125,7 +140,7 @@ void func_80014D30(s32, s32); f32 func_80014EE4(f32 arg0, s32 arg1); void func_8001530C(void); -void func_80015314(s32, s32, s32); +void func_80015314(s32, f32, s32); void func_80015390(Camera*, Player*, s32); void func_8001968C(void); @@ -170,7 +185,7 @@ extern struct unexpiredActors gUnexpiredActorsList[]; extern s16 D_8016348C; extern s32 D_801643E0[]; extern s32 D_80164408[]; -extern s16 D_80164670; +extern s16 D_80164670[]; extern s16 D_80164672; extern s16 D_80164674; extern s16 D_80164676; @@ -180,7 +195,7 @@ extern s16 D_8016467C; extern s16 D_8016467E; extern s16 D_801632B8[]; extern s16 D_801632D0[]; -extern s16 D_801632E8[]; +extern u16 D_801632E8[]; extern s16 D_801646CC; extern u16 D_80163E2A; extern Gfx D_0D0076F8[]; diff --git a/src/code_8001F980.c b/src/code_8001F980.c index 1ea615eb9..0019cc632 100644 --- a/src/code_8001F980.c +++ b/src/code_8001F980.c @@ -140,13 +140,10 @@ u16 func_8001FD78(Player *player, f32 posX, UNUSED f32 arg2, f32 posZ) { } void func_80020000(Player *player, Camera *camera, s8 arg2, s8 arg3) { - s32 stackPadding0; - s32 stackPadding1; - s32 stackPadding2; - s32 stackPadding3; + s32 pad[4]; s32 sp4C; s32 sp48; - s32 stackPadding4; + s32 pad2; s32 temp_v0; s32 temp_v0_2; @@ -1315,25 +1312,9 @@ void func_80024374(Player *player, s8 arg1, s8 arg2) { } void func_800248D0(Player *player, s8 arg1, s8 arg2, s8 arg3) { - s32 stackPadding00; + s32 pad; Mat4 sp1A4; - s32 stackPadding01; - s32 stackPadding02; - s32 stackPadding03; - s32 stackPadding04; - s32 stackPadding05; - s32 stackPadding06; - s32 stackPadding07; - s32 stackPadding08; - s32 stackPadding09; - s32 stackPadding10; - s32 stackPadding11; - s32 stackPadding12; - s32 stackPadding13; - s32 stackPadding14; - s32 stackPadding15; - s32 stackPadding16; - s32 stackPadding17; + s32 pad2[17]; Vec3f sp154; Vec3s sp14C; f32 sp148; @@ -1426,31 +1407,15 @@ void func_800248D0(Player *player, s8 arg1, s8 arg2, s8 arg3) { } void func_800256F4(Player *player, s8 arg1, s8 arg2, s8 arg3) { - s32 stackPadding00; + s32 pad; Mat4 sp12C; - s32 stackPadding01; - s32 stackPadding02; - s32 stackPadding03; - s32 stackPadding04; - s32 stackPadding05; - s32 stackPadding06; - s32 stackPadding07; - s32 stackPadding08; - s32 stackPadding09; - s32 stackPadding10; - s32 stackPadding11; - s32 stackPadding12; - s32 stackPadding13; - s32 stackPadding14; - s32 stackPadding15; - s32 stackPadding16; - s32 stackPadding17; + s32 pad2[17]; Vec3f spDC; Vec3s spD4; f32 spD0; f32 spCC; f32 spC8; - s32 stackPadding18; + s32 pad3; s16 spC2; s16 thing; @@ -1559,8 +1524,7 @@ void func_800262E0(Player *player, s8 arg1, s8 arg2, s8 arg3) { } void func_800267AC(Player *player, s8 arg1, s8 arg2) { - s32 stackPadding0; - s32 stackPadding1; + s32 pad[2]; s32 temp_t1; s32 var_v1; OSMesg *sp34; diff --git a/src/code_80071F00.c b/src/code_80071F00.c index c88538152..2bcedc2d4 100644 --- a/src/code_80071F00.c +++ b/src/code_80071F00.c @@ -1625,76 +1625,60 @@ void func_80075714(s32 objectIndex) { func_8008BF18(objectIndex); } -#ifdef MIPS_TO_C -//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022 -extern s32 D_801636A0; -extern s32 D_801637AC; extern s16 D_8016578C; extern s16 D_80165790; -extern ? D_8018C5F0; void func_80075838(void) { - s32 *var_s1; - s32 *var_s1_2; + s32 pad[2]; + s32 count; + s32 i; s32 temp_a0; - s32 temp_a0_2; - s32 var_s2; - s32 var_s2_2; - struct_80165C18_entry *temp_s0; - struct_80165C18_entry *temp_s0_2; - + struct_80165C18_entry *temp; if (D_8016578C != 0) { D_8016578C -= 1; } if (D_80165790 != 0) { D_80165790 -= 1; } - var_s2 = 0; - if ((D_801636A0 != 0) || (D_8016578C != 0)) { - var_s1 = D_8018C3F0; - do { - temp_a0 = *var_s1; + if ((sTrains[0].someFlags != 0) || (D_8016578C != 0)) { + count = 0; + for (i = 0; i < 128; i++) { + temp_a0 = D_8018C3F0[i]; if (temp_a0 != -1) { - temp_s0 = &D_80165C18[temp_a0]; - if (temp_s0->unk_0A6 != 0) { + temp = &D_80165C18[temp_a0]; + if (temp->unk_0A6 != 0) { func_80075714(temp_a0); - if (temp_s0->unk_0A6 == 0) { - func_80072100(var_s1); + if (temp->unk_0A6 == 0) { + func_80072100(&D_8018C3F0[i]); } - var_s2 += 1; + count += 1; } } - var_s1 += 4; - } while (var_s1 != &D_8018C5F0); - if (var_s2 != 0) { - D_8016578C = 0x0064; + } + if (count != 0) { + D_8016578C = 100; } } - if ((D_801637AC != 0) || (D_80165790 != 0)) { - var_s2_2 = 0; - var_s1_2 = D_8018C630; - do { - temp_a0_2 = *var_s1_2; - if (temp_a0_2 != -1) { - temp_s0_2 = &D_80165C18[temp_a0_2]; - if (temp_s0_2->unk_0A6 != 0) { - func_80075714(temp_a0_2); - if (temp_s0_2->unk_0A6 == 0) { - func_80072100(var_s1_2); + if ((sTrains[1].someFlags != 0) || (D_80165790 != 0)) { + count = 0; + for (i = 0; i < 128; i++) { + temp_a0 = D_8018C630[i]; + if (temp_a0 != -1) { + temp = &D_80165C18[temp_a0]; + if (temp->unk_0A6 != 0) { + func_80075714(temp_a0); + if (temp->unk_0A6 == 0) { + func_80072100(&D_8018C630[i]); } - var_s2_2 += 1; + count += 1; } } - var_s1_2 += 4; - } while (var_s1_2 != &D_8018C830); - if (var_s2_2 != 0) { - D_80165790 = 0x0064; } + if (count != 0) { + D_80165790 = 100; + } } } -#else -GLOBAL_ASM("asm/non_matchings/code_80071F00/func_80075838.s") -#endif void func_800759EC(s32 objectIndex, Vec3f arg1, f32 arg2) { struct_80165C18_entry *temp_v0; @@ -1765,76 +1749,62 @@ void func_80075B84(s32 arg0) { func_8008BF18(arg0); } -#ifdef MIPS_TO_C -//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022 extern s32 D_801637E8; extern s32 D_80163814; extern s16 D_8016578C; extern s16 D_80165790; -extern ? D_8018C5F0; void func_80075CA8(void) { - s32 *var_s1; - s32 *var_s1_2; + s32 pad[2]; + s32 count; + s32 i; s32 temp_a0; - s32 temp_a0_2; - s32 var_s2; - s32 var_s2_2; - struct_80165C18_entry *temp_s0; - struct_80165C18_entry *temp_s0_2; - + struct_80165C18_entry *temp; if (D_8016578C != 0) { D_8016578C -= 1; } if (D_80165790 != 0) { D_80165790 -= 1; } - var_s2 = 0; if ((D_801637E8 != 0) || (D_8016578C != 0)) { - var_s1 = D_8018C3F0; - do { - temp_a0 = *var_s1; + count = 0; + for (i = 0; i < 128; i++) { + temp_a0 = D_8018C3F0[i]; if (temp_a0 != -1) { - temp_s0 = &D_80165C18[temp_a0]; - if (temp_s0->unk_0A6 != 0) { + temp = &D_80165C18[temp_a0]; + if (temp->unk_0A6 != 0) { func_80075B84(temp_a0); - if (temp_s0->unk_0A6 == 0) { - func_80072100(var_s1); + if (temp->unk_0A6 == 0) { + func_80072100(&D_8018C3F0[i]); } - var_s2 += 1; + count += 1; } } - var_s1 += 4; - } while (var_s1 != &D_8018C5F0); - if (var_s2 != 0) { - D_8016578C = 0x0064; + } + if (count != 0) { + D_8016578C = 100; } } if ((D_80163814 != 0) || (D_80165790 != 0)) { - var_s2_2 = 0; - var_s1_2 = D_8018C630; - do { - temp_a0_2 = *var_s1_2; - if (temp_a0_2 != -1) { - temp_s0_2 = &D_80165C18[temp_a0_2]; - if (temp_s0_2->unk_0A6 != 0) { - func_80075B84(temp_a0_2); - if (temp_s0_2->unk_0A6 == 0) { - func_80072100(var_s1_2); + count = 0; + for (i = 0; i < 128; i++) { + temp_a0 = D_8018C630[i]; + if (temp_a0 != -1) { + temp = &D_80165C18[temp_a0]; + if (temp->unk_0A6 != 0) { + func_80075B84(temp_a0); + if (temp->unk_0A6 == 0) { + func_80072100(&D_8018C630[i]); } - var_s2_2 += 1; + count += 1; } } - var_s1_2 += 4; - } while (var_s1_2 != &D_8018C830); - if (var_s2_2 != 0) { - D_80165790 = 0x0064; } + if (count != 0) { + D_80165790 = 100; + } } } -#else -GLOBAL_ASM("asm/non_matchings/code_80071F00/func_80075CA8.s") -#endif void func_80075E5C(s32 objectIndex, Vec3f arg1, u16 arg2, f32 arg3, s32 arg4) { struct_80165C18_entry *temp_v0; @@ -2300,7 +2270,7 @@ void func_80076F2C(void) { } } } - + extern s16 D_800E6788[1]; // todo: fix this extern void func_80076FEC(s32 objectIndex, s32 flameIndex) { func_800723A4(objectIndex, 3); diff --git a/src/crash_screen.c b/src/crash_screen.c index ca06220e9..89164af80 100644 --- a/src/crash_screen.c +++ b/src/crash_screen.c @@ -56,9 +56,8 @@ void crash_screen_draw_glyph(u16 *framebuffer, s32 x, s32 y, s32 glyph) { } } -// Functionally Equivallent. At least, visually equivallent. +// Functionally Equivallent. #ifdef NON_MATCHING -//generated by m2c commit 3b40ab93768f52ac241c5ae84ef58ef6bc4cb1de // 0xRGBA (I think A maybe not). #define WHITE_COLOUR 0xFFFF @@ -75,36 +74,21 @@ void crash_screen_draw_glyph(u16 *framebuffer, s32 x, s32 y, s32 glyph) { **/ void crash_screen_draw_square(u16 *framebuffer) { - // s32 new_var; - - s32 var_s0; - s32 var_s2; - s32 var_s3; - s32 row; - s32 column; - s32 i; - var_s0 = 0x2E; - var_s2 = 0x28; - var_s3 = 0x2C; - // new_var = i; - // for (i = 0; i < 2; i++) - do // (var_s0 = 0x2E; var_s0 != 0x2C; var_s0--) - { - row = 0x2E - i; - for (row = var_s2; row < var_s0; row++) - { - for (column = var_s2; column < var_s0; column++) - { - framebuffer[row * 320 + column] = i == 0 ? 0xF801 : 0xFFFF; - } + s32 s0_end; + s32 s2_start; + s32 row; + s32 column; + + for (s2_start = 0x28, s0_end = s2_start + 6; s0_end != 0x2C; s0_end--, s2_start++) { + for (row = s2_start; row < s0_end; row++) { + for (column = s2_start; column < s0_end; column++) { + framebuffer[row * 320 + column] = s0_end - s2_start == 6 ? 0xF801 : 0xFFFF; + } + } } - var_s0--; - var_s2 = 6 + i; - - } while(var_s0 != var_s3); - osWritebackDCacheAll(); - osViSwapBuffer(framebuffer); + osWritebackDCacheAll(); + osViSwapBuffer(framebuffer); } #else GLOBAL_ASM("asm/non_matchings/crash_screen/crash_screen_draw_square.s") diff --git a/src/debug/all_variables.h b/src/debug/all_variables.h index 49cfa444b..531bd8d5c 100644 --- a/src/debug/all_variables.h +++ b/src/debug/all_variables.h @@ -62,8 +62,8 @@ #include <macros.h> #include <mk64.h> #include <objects.h> +#include <hardcoded_segments.h> #include <segments.h> -#include <segment_symbols.h> #include <sounds.h> #include <trig_tables.h> #include <types.h> diff --git a/src/ending/code_80281780.c b/src/ending/code_80281780.c index 2b3dfe219..57aae09e3 100644 --- a/src/ending/code_80281780.c +++ b/src/ending/code_80281780.c @@ -130,17 +130,16 @@ void load_ceremony_cutscene(void) { D_800DC5C8 = (u16)0; gSurfaceMap = (mk64_surface_map_ram *) gNextFreeMemoryAddress; // @bug these segmented addresses need to be symbols for mobility - // This syntax is required to match - set_vertex_data_with_default_section_id(0x70067E8, -1); - set_vertex_data_with_default_section_id(0x700AEF8, -1); - set_vertex_data_with_default_section_id(0x700A970, 8); - set_vertex_data_with_default_section_id(0x700AC30, 8); - set_vertex_data_with_default_section_id(0x7000CE0, 0x10); - set_vertex_data_with_default_section_id(0x7000E88, 0x10); - set_vertex_data_with_default_section_id(0x700A618, -1); - set_vertex_data_with_default_section_id(0x700A618, -1); - set_vertex_data_with_default_section_id(0x70023F8, 1); - set_vertex_data_with_default_section_id(0x7002478, 1); + set_vertex_data_with_default_section_id(0x070067E8, -1); + set_vertex_data_with_default_section_id(0x0700AEF8, -1); + set_vertex_data_with_default_section_id(0x0700A970, 8); + set_vertex_data_with_default_section_id(0x0700AC30, 8); + set_vertex_data_with_default_section_id(0x07000CE0, 0x10); + set_vertex_data_with_default_section_id(0x07000E88, 0x10); + set_vertex_data_with_default_section_id(0x0700A618, -1); + set_vertex_data_with_default_section_id(0x0700A618, -1); + set_vertex_data_with_default_section_id(0x070023F8, 1); + set_vertex_data_with_default_section_id(0x07002478, 1); func_80295C6C(); debug_switch_character_ceremony_cutscene(); func_802818BC(); diff --git a/src/hud_renderer.c b/src/hud_renderer.c index ed790546c..f5bd3aadc 100644 --- a/src/hud_renderer.c +++ b/src/hud_renderer.c @@ -27,6 +27,7 @@ #include "main.h" #include "code_80086E70.h" #include "courses/all_course_data.h" +#include <vehicles.h> void func_800431B0(Vec3f arg0, Vec3su arg1, f32 arg2, Vtx *vtx) { func_80042E00(arg0, arg1, arg2); @@ -4642,47 +4643,47 @@ void func_800540CC(s32 objectIndex, s32 cameraId) { } } -#ifdef MIPS_TO_C -//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022 -extern f32 D_801635A4; -extern s32 D_801636A0; -extern f32 D_801636B0; -extern s32 D_801637AC; -extern ? D_8018C5F0; - +// Train smoke? void func_800541BC(s32 cameraId) { - Camera *sp3C; - Gfx *temp_v1; - s32 *var_s0; - s32 *var_s0_2; + s32 pad; + s32 j; + Camera *camera; + s32 i; - temp_v1 = gDisplayListHead; - sp3C = &camera1[cameraId]; - gDisplayListHead = temp_v1 + 8; - temp_v1->words.w0 = 0x06000000; - temp_v1->words.w1 = (u32) D_0D007AE0; - func_8004477C(D_0D029458, 0x00000020, 0x00000020); - func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF); - D_80183E80->unk0 = 0; - D_80183E80->unk4 = 0x8000; - if ((D_801636A0 != 0) && (func_80041980(&D_801635A4, sp3C, 0x4000U) != 0)) { - var_s0 = D_8018C3F0; - do { - func_800540CC(*var_s0, cameraId); - var_s0 += 4; - } while (var_s0 != &D_8018C5F0); - } - if ((D_801637AC != 0) && (func_80041980(&D_801636B0, sp3C, 0x4000U) != 0)) { - var_s0_2 = D_8018C630; - do { - func_800540CC(*var_s0_2, cameraId); - var_s0_2 += 4; - } while (var_s0_2 != &D_8018C830); + camera = &camera1[cameraId]; + gSPDisplayList(gDisplayListHead++, D_0D007AE0) + func_8004477C(D_0D029458, 32, 32); + func_8004B72C(255, 255, 255, 255, 255, 255, 255); + D_80183E80[0] = 0; + D_80183E80[2] = 0x8000; + +// Render smoke for any number of trains. Don't know enough about these variables yet. +#ifdef AVOID_UB_WIP + for (j = 0; j < NUM_TRAINS; j++) { + if ((sTrains[j].someFlags != 0) && (func_80041980(&sTrains[j].locomotive.position, camera, 0x4000U) != 0)) { + + for (i = 0; i < 128; i++) { + // Need to make a way to increase this array for each train. + func_800540CC(D_8018C3F0[i], cameraId); + } + } } -} #else -GLOBAL_ASM("asm/non_matchings/hud_renderer/func_800541BC.s") + + if ((sTrains[0].someFlags != 0) && (func_80041980(&sTrains[0].locomotive.position, camera, 0x4000U) != 0)) { + + for (i = 0; i < D_8018C3F0_SIZE; i++) { + func_800540CC(D_8018C3F0[i], cameraId); + } + + } + if ((sTrains[1].someFlags != 0) && (func_80041980(&sTrains[1].locomotive.position, camera, 0x4000U) != 0)) { + for (i = 0; i < D_8018C630_SIZE; i++) { + func_800540CC(D_8018C630[i], cameraId); + } + } #endif +} void func_80054324(s32 objectIndex, s32 cameraId) { Camera *camera; @@ -4697,47 +4698,35 @@ void func_80054324(s32 objectIndex, s32 cameraId) { } } -#ifdef MIPS_TO_C -//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-28-2022 extern f32 D_801637C4; extern s32 D_801637E8; extern f32 D_801637F0; extern s32 D_80163814; -extern ? D_8018C5F0; +// Likely smoke related. void func_80054414(s32 cameraId) { - Camera *sp3C; - Gfx *temp_v1; - s32 *var_s0; - s32 *var_s0_2; + s32 pad[2]; + Camera *camera; + s32 i; + + camera = &camera1[cameraId]; + gSPDisplayList(gDisplayListHead++, D_0D007AE0); - temp_v1 = gDisplayListHead; - sp3C = &camera1[cameraId]; - gDisplayListHead = temp_v1 + 8; - temp_v1->words.w0 = 0x06000000; - temp_v1->words.w1 = (u32) D_0D007AE0; - func_8004477C(D_0D029458, 0x00000020, 0x00000020); - func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF); - D_80183E80->unk0 = 0; - D_80183E80->unk4 = 0x8000; - if ((D_801637E8 != 0) && (func_80041980(&D_801637C4, sp3C, 0x4000U) != 0)) { - var_s0 = D_8018C3F0; - do { - func_80054324(*var_s0, cameraId); - var_s0 += 4; - } while (var_s0 != &D_8018C5F0); + func_8004477C(D_0D029458, 32, 32); + func_8004B72C(255, 255, 255, 255, 255, 255, 255); + D_80183E80[0] = 0; + D_80183E80[2] = 0x8000; + if ((D_801637E8 != 0) && (func_80041980(&D_801637C4, camera, 0x4000U) != 0)) { + for (i = 0; i < D_8018C3F0_SIZE; i++) { + func_80054324(D_8018C3F0[i], cameraId); + } } - if ((D_80163814 != 0) && (func_80041980(&D_801637F0, sp3C, 0x4000U) != 0)) { - var_s0_2 = D_8018C630; - do { - func_80054324(*var_s0_2, cameraId); - var_s0_2 += 4; - } while (var_s0_2 != &D_8018C830); + if ((D_80163814 != 0) && (func_80041980(&D_801637F0, camera, 0x4000U) != 0)) { + for (i = 0; i < D_8018C630_SIZE; i++) { + func_80054324(D_8018C630[i], cameraId); + } } } -#else -GLOBAL_ASM("asm/non_matchings/hud_renderer/func_80054414.s") -#endif void func_8005457C(s32 objectIndex, s32 cameraId) { Camera *camera; @@ -4747,9 +4736,9 @@ void func_8005457C(s32 objectIndex, s32 cameraId) { if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) { temp_s0 = &D_80165C18[objectIndex]; if (temp_s0->unk_0D5 == 9) { - func_8004B72C(0x000000FF, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A2, 0, 0, (s32) temp_s0->unk_0A0); + func_8004B72C(255, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A2, 0, 0, (s32) temp_s0->unk_0A0); } else { - func_8004B138(0x000000FF, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A0); + func_8004B138(255, (s32) temp_s0->unk_0A4, 0, (s32) temp_s0->unk_0A0); } D_80183E80[1] = func_800418AC(temp_s0->pos[0], temp_s0->pos[2], camera->pos); func_800431B0(temp_s0->pos, D_80183E80, temp_s0->sizeScaling, D_0D005AE0); @@ -4805,8 +4794,8 @@ void func_80054938(s32 cameraId) { sp54 = &camera1[cameraId]; gSPDisplayList(gDisplayListHead++, D_0D007AE0); - func_8004477C(D_0D02BC58[D_80165598], 0x00000020, 0x00000020); - func_8004B72C(0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF); + func_8004477C(D_0D02BC58[D_80165598], 32, 32); + func_8004B72C(255, 255, 255, 255, 255, 255, 255); D_80183E80[0] = 0; D_80183E80[2] = 0x8000; for (var_s0 = 0; var_s0 < D_8018C870_SIZE; var_s0++) { diff --git a/src/kart_dma.c b/src/kart_dma.c index f8cc54993..1015be175 100644 --- a/src/kart_dma.c +++ b/src/kart_dma.c @@ -1707,8 +1707,7 @@ void func_80027040(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { } } else if (((temp & 0x400) == 0x400) || ((temp & 0x01000000) == 0x01000000) || ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780U); - // I think there's something off with the "player->unk_0A8 >> 8" - // I don't like that right-shift + // player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number. osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); } else { @@ -1734,8 +1733,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { ((temp & 0x02000000) == 0x02000000) || ((temp & 0x10000) == 0x10000)) { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], 0x780); - // I think there's something off with the "player->unk_0A8 >> 8" - // I don't like that right-shift + // player->unk_0A8 >> 8 converts an 8.8 fixed-point animation frame to a whole number. osPiStartDma(&gDmaIoMesg, OS_MESG_PRI_NORMAL, OS_READ, (uintptr_t) &_kart_texturesSegmentRomStart[SEGMENT_OFFSET(gKartTextureTumbles[player->characterId][player->unk_0A8 >> 8])], &D_802DFB80[arg4][arg3][arg1], 0x900, &gDmaMesgQueue); } else { osInvalDCache(&D_802DFB80[arg4][arg3][arg1], D_800DDEB0[player->characterId]); @@ -1746,7 +1744,7 @@ void func_80027560(Player *player, s8 arg1, s8 arg2, s8 arg3, s8 arg4) { void func_80027A20(Player *player, s8 arg1, s8 arg2, s8 arg3) { // Weird typecasting is being done here. We define D_802F1F80 as a 3-dimensional u32 array, // but its better to understand it as a 3-dimensional struct_D_802F1F80 array. - struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[arg3][arg2][arg1 << 7]; + struct_D_802F1F80 *temp_s0 = (struct_D_802F1F80 *) &D_802F1F80[arg3][arg2][arg1 * 0x80]; switch(gActiveScreenMode) { case SCREEN_MODE_1P: case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: diff --git a/src/main.c b/src/main.c index 171529754..1a12a4852 100644 --- a/src/main.c +++ b/src/main.c @@ -3,15 +3,14 @@ #include <PR/os.h> #include <macros.h> #include <functions.h> -#include "types.h" -#include "config.h" +#include <types.h> +#include <config.h> #include "profiler.h" #include "main.h" #include "racing/memory.h" #include "menus.h" -#include "segments.h" -#include "segment_symbols.h" -#include "common_structs.h" +#include <segments.h> +#include <common_structs.h> #include <defines.h> #include "framebuffers.h" #include "camera.h" @@ -203,9 +202,12 @@ void create_thread(OSThread *thread, OSId id, void (*entry)(void *), void *arg, thread->queue = NULL; osCreateThread(thread, id, entry, arg, sp, pri); } - +void isPrintfInit(void); void main_func(void) { osInitialize(); +#ifdef DEBUG + isPrintfInit(); // init osSyncPrintf +#endif create_thread(&gIdleThread, 1, &thread1_idle, NULL, gIdleThreadStack + ARRAY_COUNT(gIdleThreadStack), 100); osStartThread(&gIdleThread); } @@ -462,19 +464,19 @@ void display_and_vsync(void) { } void init_segment_ending_sequences(void) { - bzero((void *) SEG_ENDING_SEQUENCES, 0xDF00); + bzero((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE); osWritebackDCacheAll(); dma_copy((u8 *) SEG_ENDING_SEQUENCES, (u8 *) &_endingSequencesSegmentRomStart, ALIGN16((u32)&_endingSequencesSegmentRomEnd - (u32)&_endingSequencesSegmentRomStart)); - osInvalICache((void *) SEG_ENDING_SEQUENCES, 0xDF00); - osInvalDCache((void *) SEG_ENDING_SEQUENCES, 0xDF00); + osInvalICache((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE); + osInvalDCache((void *) SEG_ENDING_SEQUENCES, ENDING_SEQUENCE_SIZE); } void init_segment_racing(void) { - bzero((void *) SEG_RACING, 0x2C470); + bzero((void *) SEG_RACING, RACING_SEQUENCE_SIZE); osWritebackDCacheAll(); dma_copy((u8 *) SEG_RACING, (u8 *) &_racingSegmentRomStart, ALIGN16((u32)&_racingSegmentRomEnd - (u32)&_racingSegmentRomStart)); - osInvalICache((void *) SEG_RACING, 0x2C470); - osInvalDCache((void *) SEG_RACING, 0x2C470); + osInvalICache((void *) SEG_RACING, RACING_SEQUENCE_SIZE); + osInvalDCache((void *) SEG_RACING, RACING_SEQUENCE_SIZE); } void dma_copy(u8 *dest, u8 *romAddr, u32 size) { @@ -498,40 +500,46 @@ void dma_copy(u8 *dest, u8 *romAddr, u32 size) { */ void setup_game_memory(void) { UNUSED u32 pad[2]; - u32 sp2C; - u32 sp40; - uintptr_t texture_seg; - u32 sp38; + ptrdiff_t commonCourseDataSize; // Compressed mio0 size + uintptr_t textureSegSize; + ptrdiff_t textureSegStart; + uintptr_t allocatedMemory; UNUSED s32 unknown_padding; init_segment_racing(); - gHeapEndPtr = SEG_RACING; + gHeapEndPtr = (uintptr_t) SEG_RACING; set_segment_base_addr(0, (void *) SEG_START); + // Memory pool size of 0xAB630 - // todo: is it possible to shift this value? -#ifdef AVOID_UB - initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) (&_mainSegNoloadEnd[0] + 0xAB630)); -#else - initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) 0x80242F00); -#endif + initialize_memory_pool((uintptr_t) &_mainSegNoloadEnd, (uintptr_t) MEMORY_POOL_END); + func_80000BEC(); osInvalDCache((void *) SEG_802BA370, 0x5810); osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_data_802BA370SegmentRomStart, (void *) SEG_802BA370, 0x5810, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); set_segment_base_addr(2, (void *) load_data((uintptr_t) &_data_segment2SegmentRomStart, (uintptr_t) &_data_segment2SegmentRomEnd)); - sp2C = (u32)&_common_texturesSegmentRomEnd - (u32)&_common_texturesSegmentRomStart; - sp2C = ALIGN16(sp2C); - texture_seg = SEG_RACING-sp2C; - osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_common_texturesSegmentRomStart, (void *) texture_seg, sp2C, &gDmaMesgQueue); + + commonCourseDataSize = (uintptr_t)&_common_texturesSegmentRomEnd - (uintptr_t)&_common_texturesSegmentRomStart; + commonCourseDataSize = ALIGN16(commonCourseDataSize); + +#ifdef AVOID_UB + textureSegStart = (ptrdiff_t) SEG_RACING[0] - commonCourseDataSize; +#else + textureSegStart = SEG_RACING - commonCourseDataSize; +#endif + osPiStartDma(&gDmaIoMesg, 0, 0, (uintptr_t) &_common_texturesSegmentRomStart, (void *) textureSegStart, commonCourseDataSize, &gDmaMesgQueue); osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK); - sp40 = *(u32 *)(texture_seg + 4); - sp40 = ALIGN16(sp40); - sp38 = gNextFreeMemoryAddress; - mio0decode((u8 *) texture_seg, (u8 *) sp38); - set_segment_base_addr(0xD, (void *) sp38); + textureSegSize = *(uintptr_t *)(textureSegStart + 4); + textureSegSize = ALIGN16(textureSegSize); + allocatedMemory = gNextFreeMemoryAddress; + mio0decode((u8 *) textureSegStart, (u8 *) allocatedMemory); + set_segment_base_addr(0xD, (void *) allocatedMemory); + + gNextFreeMemoryAddress += textureSegSize; - gNextFreeMemoryAddress += sp40; + // Common course data does not get reloaded when the race state resets. + // Therefore, only reset the memory ptr to after the common course data. gFreeMemoryResetAnchor = gNextFreeMemoryAddress; } diff --git a/src/os/is_debug.c b/src/os/is_debug.c new file mode 100644 index 000000000..0e4fcddda --- /dev/null +++ b/src/os/is_debug.c @@ -0,0 +1,145 @@ +#include "libultra_internal.h" +#include "libc/stdarg.h" +#include <string.h> +#include "printf.h" +#include <PR/os.h> +#include "hardware.h" + +// Note: This file was very quickly strewn together from oot. +// Not great but it works. + +OSPiHandle* sISVHandle; // official name : is_Handle + +typedef struct { + /* 0x00 */ u32 magic; // IS64 + /* 0x04 */ u32 get; + /* 0x08 */ u8 unk_08[0x14-0x08]; + /* 0x14 */ u32 put; + /* 0x18 */ u8 unk_18[0x20-0x18]; + /* 0x20 */ u8 data[0x10000-0x20]; +} ISVDbg; + +#define gISVDbgPrnAdrs ((ISVDbg*)0xB3FF0000) +#define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0))) + +void* is_proutSyncPrintf(void* arg, const char* str, u32 count); + +s32 __osEPiRawReadIo(OSPiHandle *arg0, u32 devAddr, u32 *data) { + register s32 stat; + while (stat = HW_REG(PI_STATUS_REG, s32), stat & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + ; + } + *data = HW_REG(arg0->baseAddress | devAddr, s32); + return 0; +} + +s32 osEPiReadIo(OSPiHandle* handle, u32 devAddr, u32* data) { + register s32 ret; + + __osPiGetAccess(); + ret = __osEPiRawReadIo(handle, devAddr, data); + __osPiRelAccess(); + + return ret; +} + + +s32 osEPiWriteIo(OSPiHandle* handle, u32 devAddr, u32 data) { + register s32 ret; + + __osPiGetAccess(); + ret = __osEPiRawWriteIo(handle, devAddr, data); + __osPiRelAccess(); + + return ret; +} + +void isPrintfInit(void) { + sISVHandle = osCartRomInit(); + osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, 0); + osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->get, 0); + osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->magic, ASCII_TO_U32('I', 'S', '6', '4')); +} + +void osSyncPrintfUnused(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + _Printf(is_proutSyncPrintf, NULL, fmt, args); + + va_end(args); +} + +void osSyncPrintf(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + _Printf(is_proutSyncPrintf, NULL, fmt, args); + + va_end(args); +} + +void print(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + _Printf(is_proutSyncPrintf, NULL, fmt, args); + + va_end(args); +} + +// assumption +void rmonPrintf(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + _Printf(is_proutSyncPrintf, NULL, fmt, args); + + va_end(args); +} + +void* is_proutSyncPrintf(void* arg, const char* str, u32 count) { + u32 data; + s32 pos; + s32 start; + s32 end; + + osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->magic, &data); + if (data != ASCII_TO_U32('I', 'S', '6', '4')) { + return (void*)1; + } + osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->get, &data); + pos = data; + osEPiReadIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, &data); + start = data; + end = start + count; + if (end >= 0xFFE0) { + end -= 0xFFE0; + if (pos < end || start < pos) { + return (void*)1; + } + } else { + if (start < pos && pos < end) { + return (void*)1; + } + } + while (count) { + u32 addr = (u32)&gISVDbgPrnAdrs->data + (start & 0xFFFFFFC); + s32 shift = ((3 - (start & 3)) * 8); + + if (*str) { + osEPiReadIo(sISVHandle, addr, &data); + osEPiWriteIo(sISVHandle, addr, (*str << shift) | (data & ~(0xFF << shift))); + + start++; + if (start >= 0xFFE0) { + start -= 0xFFE0; + } + } + count--; + str++; + } + osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, start); + + return (void*)1; +} diff --git a/src/os/osSyncPrintf.c b/src/os/osSyncPrintf.c index 41377d13a..26bfc999d 100644 --- a/src/os/osSyncPrintf.c +++ b/src/os/osSyncPrintf.c @@ -1,6 +1,9 @@ #include "libultra_internal.h" #include "libc/stdarg.h" +// These funcs defined in is_debug.c +#ifndef DEBUG + char *osSyncPrintf(char *arg0, const char *arg1, size_t size) { // ifdef'd formatting code? return (1); @@ -12,3 +15,5 @@ void rmonPrintf(const char *fmt, ...) { _Printf(osSyncPrintf, NULL, fmt, args); va_end(args); } + +#endif // DEBUG diff --git a/src/racing/memory.c b/src/racing/memory.c index 4d1cf39dd..f6540e016 100644 --- a/src/racing/memory.c +++ b/src/racing/memory.c @@ -1354,9 +1354,9 @@ u8 *load_course(s32 courseId) { unknown1 = gCourseTable[courseId].unknown1; if ((gGamestate == ENDING_SEQUENCE) || (gGamestate == CREDITS_SEQUENCE)) { - gHeapEndPtr = SEG_ENDING_SEQUENCES; + gHeapEndPtr = (uintptr_t) SEG_ENDING_SEQUENCES; } else { - gHeapEndPtr = SEG_RACING; + gHeapEndPtr = (uintptr_t) SEG_RACING; } set_segment_base_addr(9, load_data((uintptr_t)offsetRomStart, (uintptr_t) offsetRomEnd)); |
