summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2023-10-06 00:19:09 -0600
committerGitHub <noreply@github.com>2023-10-06 00:19:09 -0600
commit2b74bbbcefe396564a55357eda094fc8c8baf36a (patch)
tree02ff798bcacc50d767e033cb2d13cab819e72eee /src
parent274fc21ffa271492d1fa231c99fc48a11e3bbed1 (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.c8
-rw-r--r--src/code_800029B0.h8
-rw-r--r--src/code_80005FD0.c1423
-rw-r--r--src/code_80005FD0.h23
-rw-r--r--src/code_8001F980.c52
-rw-r--r--src/code_80071F00.c148
-rw-r--r--src/crash_screen.c44
-rw-r--r--src/debug/all_variables.h2
-rw-r--r--src/ending/code_80281780.c21
-rw-r--r--src/hud_renderer.c131
-rw-r--r--src/kart_dma.c8
-rw-r--r--src/main.c74
-rw-r--r--src/os/is_debug.c145
-rw-r--r--src/os/osSyncPrintf.c5
-rw-r--r--src/racing/memory.c4
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));