Turn loop unrolling back on for code_8006E9C0 (#523)

Signed-off-by: Taggerung <tyler.taggerung@email.com>
This commit is contained in:
Tyler McGavran
2023-12-31 21:04:30 -05:00
committed by GitHub
parent c2c00db97d
commit 2727a5e5dd
9 changed files with 76 additions and 529 deletions
-2
View File
@@ -30,8 +30,6 @@
#include "ending/podium_ceremony_actors.h"
#include "spawn_players.h"
extern UnkCommonTextureStruct0 *D_800DC720[];
s32 unk_code_80005FD0_pad[24];
Collision D_80162E70;
s16 D_80162EB0; // Possibly a float.
+1
View File
@@ -250,6 +250,7 @@ void func_8001C42C(void);
/* This is where I'd put my static data, if I had any */
extern UnkCommonTextureStruct0 *D_800DC720[];
// Suspected to be the "width" of each waypoint. See data_0DD0A0_1.s
extern f32 D_800DCA4C[];
extern s16 D_800DCA20[];
+12
View File
@@ -335,6 +335,8 @@ extern Player *D_8018CF28[];
extern s16 D_8018CF50[];
extern s16 gGPCurrentRaceCharacterIdByRank[]; // 8018cf80
extern s16 D_8018CF98[];
extern f32 D_8018CFCC;
extern f32 D_8018CFD4;
extern f32 D_8018CFE4;
extern f32 D_8018CFEC;
extern f32 D_8018CFF4;
@@ -342,10 +344,13 @@ extern f32 D_8018CFF4;
extern f32 D_8018D028[8];
extern f32 D_8018D050[8];
extern f32 D_8018D078[8];
extern f32 D_8018D0A0[];
extern f32 D_8018D0C8[8];
extern f32 D_8018D0F0[];
extern s32 gMatrixHudCount; // 8018d120
extern s32 D_8018D114;
extern s32 D_8018D150;
extern s32 D_8018D160;
extern s32 D_8018D168;
extern s32 D_8018D170;
@@ -379,6 +384,13 @@ extern s16 D_8018D2E8;
extern s32 D_8018D314;
extern s32 D_8018D320;
extern s32 D_8018D380;
extern s32 D_8018D384;
extern s32 D_8018D388;
extern s32 D_8018D3D4;
extern s32 D_8018D3D8;
extern s32 D_8018D3DC;
extern s32 D_8018D3F0;
extern s32 D_8018D3F4;
extern s32 D_8018D3F8;
extern s32 gRaceFrameCounter; // 8018d3fc
+61 -182
View File
@@ -12,6 +12,7 @@
#include "objects.h"
#include "bomb_kart.h"
#include "variables.h"
#include "save.h"
#include "common_textures.h"
#include <sounds.h>
#include <functions.h>
@@ -45,61 +46,24 @@ void init_object_list(void) {
}
void reset_object_variable(void) {
s32 thing;
s32 thing2;
func_8006EB10();
clear_object_list();
bzero(playerHUD, HUD_PLAYERS_SIZE * sizeof(hud_player));
D_8018CAE1 = 0;
D_8018CAE2 = 0;
D_8018CAF1 = 0;
D_8018CB65 = 0;
D_8018CB66 = 0;
D_8018CB75 = 0;
D_8018CBE9 = 0;
D_8018CBEA = 0;
D_8018CBF9 = 0;
D_8018CC6D = 0;
D_8018CC6E = 0;
D_8018CC7D = 0;
D_8018CAE0 = 0;
D_8018CB64 = 0;
D_8018CBE8 = 0;
D_8018CC6C = 0;
/**
playerHUD[PLAYER_ONE].lapCount = 0;
playerHUD[PLAYER_ONE].alsoLapCount = 0;
playerHUD[PLAYER_ONE].unk_81 = 0;
playerHUD[PLAYER_TWO].lapCount = 0;
playerHUD[PLAYER_TWO].alsoLapCount = 0;
playerHUD[PLAYER_TWO].unk_81 = 0;
playerHUD[PLAYER_THREE].lapCount = 0;
playerHUD[PLAYER_THREE].alsoLapCount = 0;
playerHUD[PLAYER_THREE].unk_81 = 0;
playerHUD[PLAYER_FOUR].lapCount = 0;
playerHUD[PLAYER_FOUR].alsoLapCount = 0;
playerHUD[PLAYER_FOUR].unk_81 = 0;
playerHUD[PLAYER_ONE].raceCompleteBool = 0;
playerHUD[PLAYER_TWO].raceCompleteBool = 0;
playerHUD[PLAYER_THREE].raceCompleteBool = 0;
playerHUD[PLAYER_FOUR].raceCompleteBool = 0;
// This is close but it puts the raceCompletedBool stuff in the wrong place
// Which makes sense, but its still annoying
for (thing = 0; thing < HUD_PLAYERS_SIZE; thing++) {
playerHUD[thing].lapCount = 0;
playerHUD[thing].alsoLapCount = 0;
playerHUD[thing].unk_81 = 0;
// playerHUD[thing].raceCompleteBool = 0;
}
// This loop works, but only if we re-enable loop unrolling for this file
for (thing = 0; thing < HUD_PLAYERS_SIZE; thing++) {
playerHUD[thing].raceCompleteBool = 0;
for (thing2 = 0; thing2 < HUD_PLAYERS_SIZE; thing2++) {
playerHUD[thing2].raceCompleteBool = 0;
}
**/
}
void func_8006EB10(void) {
s32 i = 0;
s32 i;
for (i = 0; i < 128; i++) {
D_8018C1B0[i] = -1;
@@ -117,12 +81,8 @@ void func_8006EB10(void) {
D_8018C870[i] = -1;
}
for (i = 0; i < 64; i += 4) {
D_8018C970[i + 0] = -1;
D_8018C970[i + 1] = -1;
D_8018C970[i + 2] = -1;
D_8018C970[i + 3] = -1;
}
// Has to be on one line, because IDO hates you :)
for (i = 0; i < D_8018C970_SIZE; i++) { D_8018C970[i] = -1; }
D_8018CFA8 = 0;
D_8018CF90 = D_8018CFA8;
@@ -1135,173 +1095,92 @@ void init_course_object(void) {
}
}
#ifdef MIPS_TO_C
//generated by m2c commit b52d92c2340f6f4ba1aafb464188bb698752fbb0 on Jul-28-2023
? init_course_object(); /* extern */
extern s32 D_80165638;
extern s32 D_80165648;
extern s16 D_801656B0;
extern s16 D_80165708;
extern s16 D_8016579E;
extern s16 D_801657A2;
extern s8 D_80165888;
extern s8 D_80165890;
extern s32 D_80183DA0;
extern s32 D_80183DBC;
extern f32 D_8018CFCC;
extern f32 D_8018CFD4;
extern f32 D_8018CFEC;
extern f32 D_8018CFF4;
extern f32 D_8018D00C;
extern ? D_8018D028;
extern ? D_8018D050;
extern ? D_8018D078;
extern ? D_8018D098;
extern ? D_8018D0A0;
extern ? D_8018D0C8;
extern ? D_8018D0F0;
extern s32 D_8018D150;
extern s32 D_8018D380;
extern s32 D_8018D384;
extern s32 D_8018D388;
extern s32 D_8018D3BC;
extern s32 D_8018D3C0;
extern s32 D_8018D3C4;
extern s32 D_8018D3D4;
extern s32 D_8018D3D8;
extern s32 D_8018D3DC;
extern s32 D_8018D3F0;
extern s32 D_8018D3F4;
void init_hud_one_player(void) {
? *var_a0;
? *var_a1;
? *var_a2;
? *var_a3;
? *var_v0;
? *var_v1;
f32 temp_f0;
f32 temp_f0_2;
f32 temp_f0_3;
f32 var_f0;
s32 someIndex;
f32 something;
// permuter magic
long long why;
s32 one = 1;
D_8018D140 = 0;
D_8018D150 = 0;
D_8018CFCC = 1.0f;
find_unused_obj_index(&D_80183DA0);
find_unused_obj_index(D_80183DB8);
find_unused_obj_index(&D_80183DBC);
find_unused_obj_index(gItemWindowObjectByPlayerId);
find_unused_obj_index(gItemWindowObjectByPlayerId + 4);
find_unused_obj_index(&D_80183DB8[0]);
find_unused_obj_index(&D_80183DB8[1]);
find_unused_obj_index(&gItemWindowObjectByPlayerId[0]);
find_unused_obj_index(&gItemWindowObjectByPlayerId[1]);
init_object_list_index();
func_8007055C();
func_8007055C();
init_course_object();
playerHUD->speedometerX = 0x0156;
playerHUD->speedometerY = 0x0106;
D_8018CFEC = (f32) (playerHUD->speedometerX + 0x18);
D_8018CFF4 = (f32) (playerHUD->speedometerY + 6);
playerHUD[0].speedometerX = 0x0156;
playerHUD[0].speedometerY = 0x0106;
D_8018CFEC = playerHUD[0].speedometerX + 0x18;
D_8018CFF4 = playerHUD[0].speedometerY + 6;
D_8016579E = 0xDD00;
playerHUD->rankX = 0x0034;
playerHUD->rankY = 0x00C8;
playerHUD->slideRankX = 0;
playerHUD->slideRankY = 0;
playerHUD->timerX = 0x012C;
playerHUD->lap1CompletionTimeX = 0x012C;
playerHUD->lap2CompletionTimeX = 0x012C;
playerHUD->timerY = 0x0011;
playerHUD->lapX = -0x0028;
playerHUD->lapAfterImage1X = -0x0028;
playerHUD->lapAfterImage2X = -0x0028;
playerHUD->lapY = 0x0019;
playerHUD->itemBoxX = 0x00A0;
playerHUD->itemBoxY = -0x0020;
playerHUD->slideItemBoxX = 0;
playerHUD->slideItemBoxY = 0;
playerHUD->stagingPosition = (s16) *gGPCurrentRaceRankByPlayerId;
playerHUD[0].rankX = 0x0034;
playerHUD[0].rankY = 0x00C8;
playerHUD[0].slideRankX = 0;
playerHUD[0].slideRankY = 0;
playerHUD[0].stagingPosition = gGPCurrentRaceRankByPlayerId[0];
playerHUD[0].timerX = 0x012C;
playerHUD[0].lapCompletionTimeXs[0] = 0x012C;
playerHUD[0].lapCompletionTimeXs[1] = 0x012C;
playerHUD[0].timerY = 0x0011;
playerHUD[0].lapX = -0x0028;
playerHUD[0].lapAfterImage1X = -0x0028;
playerHUD[0].lapAfterImage2X = -0x0028;
playerHUD[0].lapY = 0x0019;
playerHUD[0].itemBoxX = 0x00A0;
playerHUD[0].itemBoxY = -0x0020;
playerHUD[0].slideItemBoxX = 0;
playerHUD[0].slideItemBoxY = 0;
// permuter magic
why = 0x000000A0;
init_item_window(gItemWindowObjectByPlayerId[0]);
var_f0 = 35.0f;
var_v0 = &D_8018D078;
var_a3 = &D_8018D0A0;
var_a2 = &D_8018D0F0;
var_a1 = &D_8018D050;
var_a0 = &D_8018D028;
var_v1 = &D_8018D0C8;
do {
var_a1->unk0 = var_f0;
var_a2->unk0 = var_f0;
var_v0 += 0x10;
var_v1->unk4 = 40.0f;
temp_f0 = (f32) ((f64) var_f0 + 32.0);
var_a0->unk4 = -24.0f;
var_a3->unk4 = 0.0f;
var_v0->unk-C = 0.0f;
var_a1->unk4 = temp_f0;
var_a2->unk4 = temp_f0;
var_v1->unk8 = 40.0f;
var_a0->unk8 = -24.0f;
temp_f0_2 = (f32) ((f64) temp_f0 + 32.0);
var_a3->unk8 = 0.0f;
var_v0->unk-8 = 0.0f;
var_v1->unkC = 40.0f;
var_a1->unk8 = temp_f0_2;
var_a2->unk8 = temp_f0_2;
var_a0->unkC = -24.0f;
var_a3->unkC = 0.0f;
temp_f0_3 = (f32) ((f64) temp_f0_2 + 32.0);
var_v0->unk-4 = 0.0f;
var_v1 += 0x10;
var_a0 += 0x10;
var_a1->unkC = temp_f0_3;
var_a2->unkC = temp_f0_3;
var_a1 += 0x10;
var_a2 += 0x10;
var_f0 = (f32) ((f64) temp_f0_3 + 32.0);
var_a3 += 0x10;
var_v1->unk-10 = 40.0f;
var_a0->unk-10 = -24.0f;
var_a3->unk-10 = 0.0f;
var_v0->unk-10 = 0.0f;
} while (var_v0 != &D_8018D098);
for (someIndex = 0, something = 35.0f; someIndex < 8; someIndex++, something+= 32.0) {
D_8018D0C8[someIndex] = 40.0f;
D_8018D028[someIndex] = -24.0f;
D_8018D050[someIndex] = something;
D_8018D0F0[someIndex] = something;
D_8018D0A0[someIndex] = 0.0f;
D_8018D078[someIndex] = 0.0f;
}
D_8018CFD4 = 1.0f;
D_8018D3DC = 0x000000FF;
D_8018D3D8 = 0x000000FF;
D_8018D3D4 = 0x000000FF;
D_8018D3E0 = 0x000000A0;
D_8018D3D4 = D_8018D3D8 = D_8018D3DC = 0x000000FF;
D_8018D3E0 = why;
D_8018D3E4 = 0x000000FF;
D_8018D3E8 = 0x000000FF;
D_8018D3EC = 0x000000FF;
D_8018D3F0 = 0x000000FF;
D_8018D3F4 = 1;
playerHUD->unk_4C = 0x0078;
playerHUD->unk_4A = 0x00A0;
playerHUD->rankScaling = 0.5f;
D_8018D3F4 = one;
playerHUD[0].unk_4C = 0x0078;
playerHUD[0].unk_4A = 0x00A0;
playerHUD[0].rankScaling = 0.5f;
D_801656B0 = 0;
D_80165708 = 0x0028;
D_8018D00C = 5.0f;
D_8018D388 = 4;
D_8018D380 = (s32) 0x00A0;
D_8018D384 = (s32) 0x0078;
D_8018D380 = 0x00A0;
D_8018D384 = 0x0078;
D_8018D3C4 = 0x00000032;
D_8018D3BC = (s32) 0x0028;
D_8018D3BC = 0x0028;
D_8018D3C0 = 0x00000050;
D_801657A2 = 0x0333;
switch (gModeSelection) { /* irregular */
case 0:
D_8018D158 = 8;
return;
break;
case 1:
D_80165638 = (func_800B4F2C(0, 40.0f, &D_8018D3DC, 1, 0x0078, 0x0028) & 0xFFFFF) - 1;
D_80165638 = (func_800B4F2C() & 0xFFFFF) - 1;
D_80165648 = func_800B4E24(0) & 0xFFFFF;
D_80165888 = 1;
D_80165890 = 1;
D_8018D158 = (s32) 1;
return;
D_8018D158 = 1;
break;
}
}
#else
GLOBAL_ASM("asm/non_matchings/code_8006E9C0/init_hud_one_player.s")
#endif
void init_hud_two_player_vertical(void) {
find_unused_obj_index(&D_80183DA0);
-18
View File
@@ -67,24 +67,6 @@ extern s32 D_80183DA0;
extern s32 D_80183DBC;
extern hud_player playerHUD[]; // 8018CA70 - 8018CC70
// These are all *technically* hardcoded references to spots in playerHUD, but there's something weird
// going on match wise in reset_object_variable that means we have to (for now) leave them as separate variables
extern s8 D_8018CAE0;
extern s8 D_8018CAE1;
extern s8 D_8018CAE2;
extern s8 D_8018CAF1;
extern s8 D_8018CB64;
extern s8 D_8018CB65;
extern s8 D_8018CB66;
extern s8 D_8018CB75;
extern s8 D_8018CBE8;
extern s8 D_8018CBE9;
extern s8 D_8018CBEA;
extern s8 D_8018CBF9;
extern s8 D_8018CC6C;
extern s8 D_8018CC6D;
extern s8 D_8018CC6E;
extern s8 D_8018CC7D;
extern s16 D_8018CF18;
extern s16 D_8018CF20;