summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-04-15 10:53:58 -0600
committerGitHub <noreply@github.com>2024-04-15 10:53:58 -0600
commitd9c1ebb6263cc3a2d494c9ece53edb3c8a2a4b39 (patch)
treecffb2a939f6df969461949340fbedc6260241831 /src
parent3dd4c071e1ecdf15a30aa37187283f0b974dc825 (diff)
Initial gcc Support (#568)
* Added GCC
Diffstat (limited to 'src')
-rw-r--r--src/audio/data.c3
-rw-r--r--src/audio/data.h4
-rw-r--r--src/audio/heap.h1
-rw-r--r--src/code_800029B0.c5
-rw-r--r--src/code_80057C60.c11
-rw-r--r--src/code_80057C60.h2
-rw-r--r--src/code_8006E9C0.c2
-rw-r--r--src/code_80091750.c22
-rw-r--r--src/crash_screen.c5
-rw-r--r--src/data/data_segment2.c143
-rw-r--r--src/data/trig_tables_bss.c13
-rw-r--r--src/data_segment2.h3
-rw-r--r--src/main.c19
-rw-r--r--src/main.h24
-rw-r--r--src/os/__osDequeueThread.c7
-rw-r--r--src/os/__osLeoInterrupt.c2
-rw-r--r--src/os/libultra_internal.h33
-rw-r--r--src/os/math/llmuldiv.c10
-rw-r--r--src/os/osCreateThread.c1
-rw-r--r--src/os/osEepromLongWrite.c3
-rw-r--r--src/os/osEepromRead.c23
-rw-r--r--src/os/osEepromWrite.c19
-rw-r--r--src/os/osint.h5
-rw-r--r--src/racing/math_util.c1
-rw-r--r--src/racing/math_util.h1
-rw-r--r--src/racing/memory.c1
-rw-r--r--src/render_objects.c14
-rw-r--r--src/update_objects.c16
28 files changed, 242 insertions, 151 deletions
diff --git a/src/audio/data.c b/src/audio/data.c
index ffaf3aa58..f1cb322ad 100644
--- a/src/audio/data.c
+++ b/src/audio/data.c
@@ -1,4 +1,5 @@
#include <PR/ultratypes.h>
+#include <macros.h>
#include "data.h"
#include "effects.h"
@@ -440,4 +441,4 @@ u16 D_803B7192; // unconfirmed
u32 gAudioRandom;
s32 gAudioErrorFlags;
u32 D_803B71A0[4]; // unconfirmed
-u8 D_803B71B0[4]; // unconfirmed
+ALIGNED8 u8 D_803B71B0[4]; // unconfirmed
diff --git a/src/audio/data.h b/src/audio/data.h
index fe9ca89b0..801137152 100644
--- a/src/audio/data.h
+++ b/src/audio/data.h
@@ -56,8 +56,8 @@ extern s16 gAiBufferLengths[NUMAIBUFFERS]; // osAiSetNextBuffer nbytes
extern u16 D_803B7192; // unconfirmed
extern u32 gAudioRandom;
extern s32 gAudioErrorFlags;
-extern u32 D_803B71A0[4]; // unconfirmed
-extern u8 D_803B71B0[4]; // unconfirmed
+extern u32 D_803B71A0[]; // unconfirmed
+extern u8 D_803B71B0[]; // unconfirmed
extern struct ReverbSettingsEU sReverbSettings[];
extern struct AudioSessionSettingsEU gAudioSessionPresets[];
diff --git a/src/audio/heap.h b/src/audio/heap.h
index d759eab18..6a8999396 100644
--- a/src/audio/heap.h
+++ b/src/audio/heap.h
@@ -116,7 +116,6 @@ void *unk_pool1_lookup(s32 poolIdx, s32 id);
void func_800BA8B0(s32, s32);
extern s32 D_800EA5D0;
-extern u8 D_803B71B0[];
extern s32 gMaxAudioCmds;
extern s16 gTempoInternalToExternal;
diff --git a/src/code_800029B0.c b/src/code_800029B0.c
index 86acf4c63..a665de1b8 100644
--- a/src/code_800029B0.c
+++ b/src/code_800029B0.c
@@ -26,7 +26,6 @@
extern s32 D_802BA038;
extern s16 D_802BA048;
-
s16 gCurrentCourseId = 0;
s16 gCurrentlyLoadedCourseId = 0xFF;
u16 D_800DC5A8 = 0;
@@ -52,7 +51,7 @@ u16 D_800DC5E4 = 0;
//! @todo gPlayerWinningIndex (D_800DC5E8) accessed as word, D_800DC5EB as u8
s32 gPlayerWinningIndex = 0;
-struct UnkStruct_800DC5EC D_8015F480[4];
+ALIGNED16 struct UnkStruct_800DC5EC D_8015F480[4];
struct UnkStruct_800DC5EC *D_800DC5EC = &D_8015F480[0];
struct UnkStruct_800DC5EC *D_800DC5F0 = &D_8015F480[1];
struct UnkStruct_800DC5EC *D_800DC5F4 = &D_8015F480[2];
@@ -66,7 +65,7 @@ Lights1 D_800DC610[] = {
gdSPDefLights1(175, 175, 175, 255, 255, 255, 0, 0, 120),
gdSPDefLights1(115, 115, 115, 255, 255, 255, 0, 0, 120),
};
-static s32 pad_800029B0 = 0x80000000;
+UNUSED s32 pad_800029B0 = 0x80000000;
s16 gCreditsCourseId = COURSE_LUIGI_RACEWAY;
s16 gPlaceItemBoxes = 1;
diff --git a/src/code_80057C60.c b/src/code_80057C60.c
index 70698aeeb..053573c47 100644
--- a/src/code_80057C60.c
+++ b/src/code_80057C60.c
@@ -5722,7 +5722,7 @@ void func_8006A7C0(Player *player, f32 arg1, f32 arg2, s8 arg3, s8 arg4) {
}
}
-void func_8006AFD0(Player *player, s8 arg1, s16 arg2, s8 arg3) {
+void render_battle_balloon(Player *player, s8 arg1, s16 arg2, s8 arg3) {
Mat4 sp140;
Vec3f sp134;
Vec3s sp12C;
@@ -5848,16 +5848,19 @@ void func_8006B9CC(Player* player, s8 arg1) {
void func_8006BA94(Player* player, s8 playerIndex, s8 arg2) {
if (gPlayerBalloonStatus[playerIndex][0] != BALLOON_STATUS_GONE) {
- func_8006AFD0(player, playerIndex, 0, arg2);
+ render_battle_balloon(player, playerIndex, 0, arg2);
}
if (gPlayerBalloonStatus[playerIndex][1] != BALLOON_STATUS_GONE) {
- func_8006AFD0(player, playerIndex, 1, arg2);
+ render_battle_balloon(player, playerIndex, 1, arg2);
}
if (gPlayerBalloonStatus[playerIndex][2] != BALLOON_STATUS_GONE) {
- func_8006AFD0(player, playerIndex, 2, arg2);
+ render_battle_balloon(player, playerIndex, 2, arg2);
}
}
+/**
+ * Used in podium ceremony.
+*/
void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) {
Mat4 sp108;
Vec3f spFC;
diff --git a/src/code_80057C60.h b/src/code_80057C60.h
index adec3a860..f8f5eeeeb 100644
--- a/src/code_80057C60.h
+++ b/src/code_80057C60.h
@@ -221,7 +221,7 @@ void func_8006A01C(Player*, s8, s16, s8);
void func_8006A280(Player*, s8, s16, s8);
void func_8006A50C(Player*, f32, f32, s8, s8, s16);
void func_8006A7C0(Player*, f32, f32, s8, s8);
-void func_8006AFD0(Player*, s8, s16, s8);
+void render_battle_balloon(Player*, s8, s16, s8);
void func_8006B7E4(Player*, s8);
void func_8006B87C(Player*, s8);
diff --git a/src/code_8006E9C0.c b/src/code_8006E9C0.c
index 18a044ef4..d9392cdcb 100644
--- a/src/code_8006E9C0.c
+++ b/src/code_8006E9C0.c
@@ -616,7 +616,7 @@ void init_cloud_object(s32 objectIndex, s32 arg1, CloudData *arg2) {
temp_v0->unk_09E = arg2->posY;
temp_v0->sizeScaling = (f32) arg2->scalePercent / 100.0;
temp_v0->activeTexture = &D_8018D220[arg2->subType];
- func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0);
+ func_80073404(objectIndex, 0x40U, 0x20U, &D_0D005FB0[0]);
temp_v0->primAlpha = 0x00FF;
}
diff --git a/src/code_80091750.c b/src/code_80091750.c
index 2fdbf0c99..1e08b0fa9 100644
--- a/src/code_80091750.c
+++ b/src/code_80091750.c
@@ -90,7 +90,7 @@ s32 gControllerPak1NumPagesFree;
s32 gControllerPak1FileNote;
s32 gControllerPak2FileNote;
s32 code_80091750_bss_pad2;
-SaveData gSaveData;
+ALIGNED8 SaveData gSaveData;
u8 D_8018ED90;
u8 D_8018ED91;
@@ -1152,7 +1152,7 @@ s32 D_800E84A0[] = {
};
Vtx *D_800E84C0[] = {
- D_02007BB8, D_02007CD8, D_02007DF8,
+ &D_02007BB8[0], &D_02007BB8[18], &D_02007BB8[36],
};
Gfx *D_800E84CC[] = {
@@ -2791,6 +2791,15 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else {
index = ((gTextColor * 2) + ((s32) gGlobalTimer % 2)) - 4;
}
+#ifdef AVOID_UB
+ if (arg1 == D_02007BB8) {
+ gSPDisplayList(displayListHead++, D_800E84CC[index]);
+ } else if (arg1 == &D_02007BB8[18]) {
+ gSPDisplayList(displayListHead++, D_800E84EC[index]);
+ } else if (arg1 == &D_02007BB8[36]) {
+ gSPDisplayList(displayListHead++, D_800E850C[index]);
+ }
+#else
if (arg1 == D_02007BB8) {
gSPDisplayList(displayListHead++, D_800E84CC[index]);
} else if (arg1 == D_02007CD8) {
@@ -2798,6 +2807,9 @@ Gfx *func_800959F8(Gfx *displayListHead, Vtx *arg1) {
} else if (arg1 == D_02007DF8) {
gSPDisplayList(displayListHead++, D_800E850C[index]);
}
+#endif
+
+
return displayListHead;
}
@@ -2863,16 +2875,16 @@ func_80095BD0_label2:
gDPLoadTextureTile_4b(displayListHead++, arg1, G_IM_FMT_I, arg4, 0, 0, 0, arg4, arg5, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
switch (arg4) {
default:
- var_a1 = D_02007CD8;
+ var_a1 = &D_02007BB8[18];
break;
case 16:
- var_a1 = D_02007CD8;
+ var_a1 = &D_02007BB8[18];
break;
case 26:
var_a1 = D_02007BB8;
break;
case 30:
- var_a1 = D_02007DF8;
+ var_a1 = &D_02007BB8[36];
break;
}
diff --git a/src/crash_screen.c b/src/crash_screen.c
index d2225a297..54f77037a 100644
--- a/src/crash_screen.c
+++ b/src/crash_screen.c
@@ -211,8 +211,7 @@ void thread9_crash_screen(UNUSED void *arg0)
// Run only on the first iteration.
if (sCounter == 0) {
crash_screen_draw_square(pFramebuffer);
-//#define SKIP_DRAW_SQUARE
-#ifndef SKIP_DRAW_SQUARE
+#ifndef DEBUG
while(TRUE)
{
read_controllers();
@@ -231,7 +230,7 @@ void thread9_crash_screen(UNUSED void *arg0)
}
}
#endif
-#ifdef CRASH_SCREEN_ENHANCEMENT
+#if DEBUG
crash_screen_draw(thread);
#else
crash_screen_draw_info(pFramebuffer, thread);
diff --git a/src/data/data_segment2.c b/src/data/data_segment2.c
index f2cd14e91..8598f825e 100644
--- a/src/data/data_segment2.c
+++ b/src/data/data_segment2.c
@@ -3,7 +3,7 @@
#include <PR/ultratypes.h>
#include <PR/gbi.h>
#include "data_segment2.h"
-#include <assets/startup_logo.h>"
+#include <assets/startup_logo.h>
Gfx D_02007650[] = {
gsDPPipeSync(),
@@ -104,168 +104,168 @@ Gfx D_02007818[] = {
Gfx D_02007838[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007BD8, 2, 2),
+ gsSPVertex(&D_02007BB8[2], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007858[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007BF8, 2, 2),
+ gsSPVertex(&D_02007BB8[4], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007878[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007C18, 2, 2),
+ gsSPVertex(&D_02007BB8[6], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007898[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007C38, 2, 2),
+ gsSPVertex(&D_02007BB8[8], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078B8[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007C58, 2, 2),
+ gsSPVertex(&D_02007BB8[10], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078D8[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007C78, 2, 2),
+ gsSPVertex(&D_02007BB8[12], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020078F8[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007C98, 2, 2),
+ gsSPVertex(&D_02007BB8[14], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007918[] = {
gsSPVertex(D_02007BB8, 2, 0),
- gsSPVertex(D_02007CB8, 2, 2),
+ gsSPVertex(&D_02007BB8[16], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007938[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007CF8, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[20], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007958[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007D18, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[22], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007978[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007D38, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[24], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007998[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007D58, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[26], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079B8[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007D78, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[28], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079D8[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007D98, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[30], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_020079F8[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007DB8, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[32], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A18[] = {
- gsSPVertex(D_02007CD8, 2, 0),
- gsSPVertex(D_02007DD8, 2, 2),
+ gsSPVertex(&D_02007BB8[18], 2, 0),
+ gsSPVertex(&D_02007BB8[34], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A38[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007E18, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[38], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A58[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007E38, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[40], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A78[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007E58, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[42], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007A98[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007E78, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[44], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AB8[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007E98, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[46], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AD8[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007EB8, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[48], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007AF8[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007ED8, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[50], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
Gfx D_02007B18[] = {
- gsSPVertex(D_02007DF8, 2, 0),
- gsSPVertex(D_02007EF8, 2, 2),
+ gsSPVertex(&D_02007BB8[36], 2, 0),
+ gsSPVertex(&D_02007BB8[52], 2, 2),
gsSPDisplayList(common_rectangle_display),
gsSPEndDisplayList(),
};
@@ -281,8 +281,64 @@ UNUSED Vtx D_02007B38[] = {
{{{ 0, 0, 0}, 0, { 0, 448}, {0xff, 0x00, 0x00, 0xff}}},
};
-//! @todo Place all these vertices in a single array
-// Access the correct vertex using sym[value]
+#ifdef AVOID_UB
+Vtx D_02007BB8[] = {
+ {{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{26, 0, 0}, 0, {1600, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{16, 65520, 0}, 0, {960, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{16, 0, 0}, 0, {960, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 960}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 65504, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{30, 65504, 0}, 0, {1856, 0}, {0xff, 0xff, 0xff, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0x00, 0xff, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0x00, 0xff, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0xff, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+ {{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
+};
+#else
Vtx D_02007BB8[] = {
{{{ 0, 65520, 0}, 0, { 0, 0}, {0xff, 0xff, 0xff, 0xff}}},
{{{26, 65520, 0}, 0, {1600, 0}, {0xff, 0xff, 0xff, 0xff}}},
@@ -417,6 +473,7 @@ Vtx D_02007EF8[] = {
{{{30, 0, 0}, 0, {1856, 1984}, {0xff, 0x00, 0x00, 0xff}}},
{{{ 0, 0, 0}, 0, { 0, 1984}, {0xff, 0x00, 0x00, 0xff}}},
};
+#endif
Gfx D_02007F18[] = {
gsDPPipeSync(),
diff --git a/src/data/trig_tables_bss.c b/src/data/trig_tables_bss.c
new file mode 100644
index 000000000..aa2bc38d1
--- /dev/null
+++ b/src/data/trig_tables_bss.c
@@ -0,0 +1,13 @@
+#include <ultra64.h>
+#include <macros.h>
+
+/**
+ * Trig tables get loaded into memory at this location.
+ * See trig_tables.c for the real file.
+ */
+
+#ifdef VERSION_EU
+ALIGNED8 u8 trigTablesPadding[0x5750];
+#else
+ALIGNED8 u8 trigTablesPadding[0x5810];
+#endif
diff --git a/src/data_segment2.h b/src/data_segment2.h
index 0a0d5eb1d..f69f6a4d0 100644
--- a/src/data_segment2.h
+++ b/src/data_segment2.h
@@ -51,6 +51,7 @@ extern Gfx D_02008058[];
extern Gfx common_rectangle_display[];
extern Vtx D_02007BB8[];
+#ifndef AVOID_UB
extern Vtx D_02007BD8[];
extern Vtx D_02007BF8[];
extern Vtx D_02007C18[];
@@ -77,5 +78,7 @@ extern Vtx D_02007E98[];
extern Vtx D_02007EB8[];
extern Vtx D_02007ED8[];
extern Vtx D_02007EF8[];
+#endif
+
#endif
diff --git a/src/main.c b/src/main.c
index 78222bca6..873d8efd6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,4 +1,6 @@
-#define STRANGE_MAIN_HEADER_H
+#ifndef GCC
+#define D_800DC510_AS_U16
+#endif
#include <ultra64.h>
#include <PR/os.h>
#include <PR/ucode.h>
@@ -83,11 +85,11 @@ Player *gPlayerTwoCopy = &gPlayers[1];
UNUSED Player *gPlayerThreeCopy = &gPlayers[2];
UNUSED Player *gPlayerFourCopy = &gPlayers[3];
-s32 D_800FD850[3];
+UNUSED s32 D_800FD850[3];
struct GfxPool gGfxPools[2];
struct GfxPool *gGfxPool;
-s32 gfxPool_padding; // is this necessary?
+UNUSED s32 gfxPool_padding; // is this necessary?
struct VblankHandler gGameVblankHandler;
struct VblankHandler sSoundVblankHandler;
OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
@@ -103,15 +105,14 @@ OSMesgQueue gSIEventMesgQueue;
OSMesg gSIEventMesgBuf[3];
OSContStatus gControllerStatuses[4];
-
OSContPad gControllerPads[4];
u8 gControllerBits;
-
struct UnkStruct_8015F584 D_8014F110[1024];
u16 gNumActors;
u16 gMatrixObjectCount;
s32 gTickSpeed;
f32 D_80150118;
+
u16 wasSoftReset;
u16 D_8015011E;
@@ -120,9 +121,6 @@ s32 gGotoMode;
UNUSED s32 D_80150128;
UNUSED s32 D_8015012C;
f32 gCameraZoom[4]; // look like to be the fov of each character
-//f32 D_80150134;
-//f32 D_80150138;
-//f32 D_8015013C;
UNUSED s32 D_80150140;
UNUSED s32 D_80150144;
f32 gScreenAspect;
@@ -133,6 +131,7 @@ UNUSED f32 D_80150154;
struct D_80150158 gD_80150158[16];
uintptr_t gSegmentTable[16];
Gfx *gDisplayListHead;
+
struct SPTask *gGfxSPTask;
s32 D_801502A0;
s32 D_801502A4;
@@ -161,8 +160,8 @@ ALIGNED8 u8 gAudioThreadStack[STACKSIZE];
UNUSED OSThread D_8015CD30;
UNUSED ALIGNED8 u8 D_8015CD30_Stack[STACKSIZE / 2];
-u8 gGfxSPTaskYieldBuffer[4352];
-u32 gGfxSPTaskStack[256];
+ALIGNED8 u8 gGfxSPTaskYieldBuffer[4352];
+ALIGNED8 u32 gGfxSPTaskStack[256];
OSMesg gPIMesgBuf[32];
OSMesgQueue gPIMesgQueue;
diff --git a/src/main.h b/src/main.h
index eca35b4a5..b4f759d85 100644
--- a/src/main.h
+++ b/src/main.h
@@ -136,23 +136,21 @@ extern Player *gPlayerEight;
extern Player *gPlayerOneCopy;
extern Player *gPlayerTwoCopy;
-extern s32 D_800FD850[];
extern struct GfxPool gGfxPools[];
extern struct GfxPool *gGfxPool;
-extern s32 gfxPool_padding;
extern struct VblankHandler gGameVblankHandler;
extern struct VblankHandler sSoundVblankHandler;
extern OSMesgQueue gDmaMesgQueue, gGameVblankQueue, gGfxVblankQueue, unused_gMsgQueue, gIntrMesgQueue, gSPTaskMesgQueue;
extern OSMesgQueue sSoundMesgQueue;
-extern OSMesg sSoundMesgBuf[];
-extern OSMesg gDmaMesgBuf[], gGameMesgBuf;
+extern OSMesg sSoundMesgBuf[1];
+extern OSMesg gDmaMesgBuf[1], gGameMesgBuf;
extern OSMesg gGfxMesgBuf[];
-extern OSMesg gIntrMesgBuf[], gSPTaskMesgBuf[];
+extern OSMesg gIntrMesgBuf[16], gSPTaskMesgBuf[16];
extern OSMesg gMainReceivedMesg;
extern OSIoMesg gDmaIoMesg;
extern OSMesgQueue gSIEventMesgQueue;
-extern OSMesg gSIEventMesgBuf[];
+extern OSMesg gSIEventMesgBuf[3];
extern OSContStatus gControllerStatuses[];
@@ -203,11 +201,19 @@ extern u8 gGfxSPTaskYieldBuffer[];
extern u32 gGfxSPTaskStack[];
extern OSMesg gPIMesgBuf[];
extern OSMesgQueue gPIMesgQueue;
-
+void race_logic_loop(void);
extern s32 gGamestate;
-#ifndef STRANGE_MAIN_HEADER_H
-extern s32 D_800DC510;
+#ifndef D_800DC510_AS_U16
+ // Prevent overlapping writes in gcc
+ // Whether D_800DC510 was intended to be a separate variable in main.c from the rest of the game is unknown
+ #ifdef GCC
+ extern u16 D_800DC510;
+ #else
+ extern s32 D_800DC510;
+ #endif
#endif
+
+extern u16 D_800DC514;
extern u16 creditsRenderMode;
extern u16 gDemoMode;
extern u16 gEnableDebugMode;
diff --git a/src/os/__osDequeueThread.c b/src/os/__osDequeueThread.c
index a9b01fcfc..7f4287cdd 100644
--- a/src/os/__osDequeueThread.c
+++ b/src/os/__osDequeueThread.c
@@ -1,10 +1,15 @@
#include "libultra_internal.h"
-OSThreadTail __osThreadTail = {NULL, -1};
+#ifndef AVOID_UB
+OSThread *__osThreadTail = NULL;
+u32 __osTest = -1;
OSThread *__osRunQueue = (OSThread *) &__osThreadTail;
OSThread *__osActiveQueue = (OSThread *) &__osThreadTail;
OSThread *__osRunningThread = NULL;
OSThread *__osFaultedThread = NULL;
+#else
+OSThread_ListHead __osThreadTail_fix = {NULL, -1, (OSThread *) &__osThreadTail_fix, (OSThread *) &__osThreadTail_fix, NULL, 0};
+#endif
void __osDequeueThread(OSThread **queue, OSThread *thread) {
register OSThread **a2;
diff --git a/src/os/__osLeoInterrupt.c b/src/os/__osLeoInterrupt.c
index d08a40e5e..e77c5af6d 100644
--- a/src/os/__osLeoInterrupt.c
+++ b/src/os/__osLeoInterrupt.c
@@ -1,8 +1,8 @@
#include "ultra64.h"
#include "osint.h"
#include "piint.h"
+#include "libultra_internal.h"
-extern OSThread *__osRunQueue;
static void __osLeoResume(void);
static void __osLeoAbnormalResume(void);
extern u8 leoDiskStack[OS_PIM_STACKSIZE]; //technically should have a OS_LEO_STACKSIZE or something..
diff --git a/src/os/libultra_internal.h b/src/os/libultra_internal.h
index 3e7032370..5a6027f75 100644
--- a/src/os/libultra_internal.h
+++ b/src/os/libultra_internal.h
@@ -1,6 +1,7 @@
#ifndef _LIBULTRA_INTERNAL_H_
#define _LIBULTRA_INTERNAL_H_
#include <ultra64.h>
+#include <PR/os_thread.h>
#include "macros.h"
typedef struct __OSEventState
@@ -15,15 +16,41 @@ typedef struct __osThreadTail
OSPri priority;
} OSThreadTail;
+/*
+ * This define is needed because the original definitions in __osDequeueThread.c are declared
+ * seperately instead of part of a single struct, however some code alises over this memory
+ * assuming a unified structure. To fix this, we declare the full type here and then alias the
+ * symbol names to the correct members in AVOID_UB.
+ */
+typedef struct
+{
+ /*0x00*/ struct OSThread_s *next;
+ /*0x04*/ OSPri priority;
+ /*0x08*/ struct OSThread_s *queue;
+ /*0x0C*/ struct OSThread_s *tlnext;
+ /*0x10*/ struct OSThread_s *unk10;
+ /*0x14*/ u32 unk14;
+} OSThread_ListHead;
+#ifdef AVOID_UB
+
+// Now fix the symbols to the new one.
+extern OSThread_ListHead __osThreadTail_fix;
+
+#define __osThreadTail __osThreadTail_fix.next
+#define D_80334894 __osThreadTail_fix.priority
+#define __osRunQueue __osThreadTail_fix.queue
+#define __osActiveQueue __osThreadTail_fix.tlnext
+#define __osRunningThread __osThreadTail_fix.unk10
+#else
// Original OSThread_ListHead definitions
-extern OSThreadTail __osThreadTail;
+extern OSThread *__osThreadTail;
extern OSThread *__osActiveQueue;
extern OSThread *__osRunQueue;
extern OSThread *__osRunningThread;
-
+#endif
// Original EEPROM definitions
-extern ALIGNED8 u32 D_80365E00[15];
+extern u32 D_80365E00[15];
extern u32 D_80365E3C;
typedef struct {
diff --git a/src/os/math/llmuldiv.c b/src/os/math/llmuldiv.c
index e64b9d0c8..2af91aae5 100644
--- a/src/os/math/llmuldiv.c
+++ b/src/os/math/llmuldiv.c
@@ -7,7 +7,7 @@ unsigned long long __ull_rem(unsigned long long a0, unsigned long long a1)
return a0 % a1;
}
unsigned long long __ull_div(unsigned long long a0, unsigned long long a1)
-{
+{
return a0 / a1;
}
@@ -34,19 +34,19 @@ unsigned long long __ll_mul(unsigned long long a0, unsigned long long a1)
void __ull_divremi(unsigned long long *div, unsigned long long *rem, unsigned long long a2, unsigned short a3)
{
*div = a2 / a3;
- *rem = a2 % a3;
-}
+ *rem = a2 % a3;
+}
long long __ll_mod(long long a0, long long a1)
{
long long tmp = a0 % a1;
if ((tmp < 0 && a1 > 0) || (tmp > 0 && a1 < 0))
{
- tmp += a1;
+ tmp += a1;
}
return tmp;
}
-
+
long long __ll_rshift(long long a0, long long a1)
{
return a0 >> a1;
diff --git a/src/os/osCreateThread.c b/src/os/osCreateThread.c
index d714a8eba..93a6f241f 100644
--- a/src/os/osCreateThread.c
+++ b/src/os/osCreateThread.c
@@ -1,7 +1,6 @@
#include "libultra_internal.h"
void __osCleanupThread(void);
-extern OSThread *__osActiveQueue;
// Don't warn about pointer->u64 cast
diff --git a/src/os/osEepromLongWrite.c b/src/os/osEepromLongWrite.c
index 8a7f72e60..d68104ccd 100644
--- a/src/os/osEepromLongWrite.c
+++ b/src/os/osEepromLongWrite.c
@@ -1,8 +1,7 @@
#include "libultra_internal.h"
+#include "controller.h"
-extern u64 osClockRate;
extern u8 D_80365D20;
-extern u8 _osContNumControllers;
extern OSTimer D_80196548;
extern OSMesgQueue _osContMesgQueue;
extern OSMesg _osContMesgBuff[4];
diff --git a/src/os/osEepromRead.c b/src/os/osEepromRead.c
index a3fc3a4b3..040594444 100644
--- a/src/os/osEepromRead.c
+++ b/src/os/osEepromRead.c
@@ -1,30 +1,11 @@
#include "libultra_internal.h"
-#include "controller.h"
#include "macros.h"
+#include "controller.h"
-extern u8 __osContLastCmd;
+extern u8 _osLastSentSiCmd;
extern OSPifRam __osEepPifRam;
-typedef struct {
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u8 unk06;
- u8 unk07;
-} unkStruct3;
-
-typedef struct {
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- unkStruct3 unk04;
-} unkStruct2;
-
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepReadData(u8);
diff --git a/src/os/osEepromWrite.c b/src/os/osEepromWrite.c
index 845432502..a48f6873b 100644
--- a/src/os/osEepromWrite.c
+++ b/src/os/osEepromWrite.c
@@ -7,25 +7,6 @@ OSPifRam __osEepPifRam;
extern u8 __osContLastCmd;
-typedef struct {
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- u8 unk04;
- u8 unk05;
- u8 unk06;
- u8 unk07;
-} unkStruct3;
-
-typedef struct {
- u8 unk00;
- u8 unk01;
- u8 unk02;
- u8 unk03;
- unkStruct3 unk04;
-} unkStruct2;
-
s32 __osEepStatus(OSMesgQueue *, OSContStatus *);
void __osPackEepWriteData(u8, u8 *);
diff --git a/src/os/osint.h b/src/os/osint.h
index f607d6a6e..9e35c1edb 100644
--- a/src/os/osint.h
+++ b/src/os/osint.h
@@ -1,6 +1,7 @@
#ifndef _OSINT_H
#define _OSINT_H
#include "libultra_internal.h"
+#include <macros.h>
//maybe should be in exceptasm.h?
extern void __osEnqueueAndYield(OSThread **);
@@ -15,10 +16,14 @@ extern void __osTimerInterrupt(void);
extern u32 __osProbeTLB(void *);
extern int __osSpDeviceBusy(void);
+#ifdef AVOID_UB
+extern OSThread_ListHead __osThreadTail_fix;
+#else
extern OSThread *__osRunningThread;
extern OSThread *__osActiveQueue;
extern OSThread *__osFaultedThread;
extern OSThread *__osRunQueue;
+#endif
extern OSTimer *__osTimerList;
extern OSTimer __osBaseTimer;
diff --git a/src/racing/math_util.c b/src/racing/math_util.c
index c28210f63..a49ff6a4e 100644
--- a/src/racing/math_util.c
+++ b/src/racing/math_util.c
@@ -7,6 +7,7 @@
#include <PR/rcp.h>
#include "buffers/trig_tables.h"
#include "math.h"
+#include "memory.h"
#pragma intrinsic (sqrtf,fabs)
diff --git a/src/racing/math_util.h b/src/racing/math_util.h
index d9ee99e63..3addd2a9e 100644
--- a/src/racing/math_util.h
+++ b/src/racing/math_util.h
@@ -22,6 +22,7 @@ s32 render_set_position(Mat4, s32);
f32 func_802B51E8(Vec3f, Vec3f);
s32 get_angle_between_two_vectors(Vec3f, Vec3f);
u32 func_802B5258(Vec3f, Vec3s);
+void func_802B5794(Mat4, Vec3f, Vec3f);
void vec3f_set(Vec3f, f32, f32, f32);
void vec3s_set(Vec3s, s16, s16, s16);
void *vec3f_copy_return(Vec3f, Vec3f);
diff --git a/src/racing/memory.c b/src/racing/memory.c
index 013c1c62c..41f7ef535 100644
--- a/src/racing/memory.c
+++ b/src/racing/memory.c
@@ -26,6 +26,7 @@ struct UnkStruct_802B8CD4 D_802B8CD4[] = {
0
};
s32 D_802B8CE4 = 0; // pad
+s32 memoryPadding[2];
/**
* @brief Returns the address of the next available memory location and updates the memory pointer
diff --git a/src/render_objects.c b/src/render_objects.c
index 457d5acce..6519871b3 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -563,19 +563,19 @@ UNUSED void func_80046C78(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
}
UNUSED void func_80046CDC(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
- func_800464D0(arg0, arg1, arg2, arg3, texture, &D_0D005FB0, 64, 32, 64, 32);
+ func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D40(Vec3f arg0, Vec3su arg1, f32 arg2, u8 *texture) {
- func_80046808(arg0, arg1, arg2, texture, &D_0D005FB0, 64, 32, 64, 32);
+ func_80046808(arg0, arg1, arg2, texture, D_0D005FB0, 64, 32, 64, 32);
}
UNUSED void func_80046D90(s32 arg0, s32 arg1, u16 arg2, f32 arg3, u8 *texture) {
- func_800464D0(arg0, arg1, arg2, arg3, texture, D_0D0060B0, 64, 64, 64, 32);
+ func_800464D0(arg0, arg1, arg2, arg3, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
UNUSED void func_80046DF4(s32 arg0, s32 arg1, u16 arg2, f32 arg3, s32 arg4, u8 *texture) {
- func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, D_0D0060B0, 64, 64, 64, 32);
+ func_800465B8(arg0, arg1, arg2, arg3, arg4, texture, common_vtx_hedgehog, 64, 64, 64, 32);
}
void load_texture_and_tlut(u8 *tlut, u8 *texture, s32 width, s32 height) {
@@ -3528,7 +3528,7 @@ void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
D_80183E80[2] = (s16) (temp_v0->unk_084[6] + 0x8000);
rsp_set_matrix_transformation(temp_v0->pos, (u16 *) D_80183E80, temp_v0->sizeScaling);
set_color_render((s32) temp_v0->unk_084[0], (s32) temp_v0->unk_084[1], (s32) temp_v0->unk_084[2], (s32) temp_v0->unk_084[3], (s32) temp_v0->unk_084[4], (s32) temp_v0->unk_084[5], (s32) temp_v0->primAlpha);
- gSPVertex(gDisplayListHead++, &D_0D0060B0[vertexIndex], 4, 0);
+ gSPVertex(gDisplayListHead++, &common_vtx_hedgehog[vertexIndex], 4, 0);
gSPDisplayList(gDisplayListHead++, common_rectangle_display);
}
}
@@ -3906,7 +3906,7 @@ void draw_crabs(s32 objectIndex, s32 cameraId) {
camera = &camera1[cameraId];
func_8004A6EC(objectIndex, 0.5f);
gObjectList[objectIndex].orientation[1] = func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos);
- draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
+ draw_2d_texture_at(gObjectList[objectIndex].pos, gObjectList[objectIndex].orientation, gObjectList[objectIndex].sizeScaling, (u8 *) gObjectList[objectIndex].activeTLUT, gObjectList[objectIndex].activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
@@ -4161,7 +4161,7 @@ void render_object_neon(s32 cameraId) {
object = &gObjectList[objectIndex];
if ((object->state >= 2) && (is_obj_index_flag_status_inactive(objectIndex, 0x00080000) != 0) && (is_object_visible_on_camera(objectIndex, camera, 0x2AABU) != 0)) {
object->orientation[1] = angle_between_object_camera(objectIndex, camera);
- draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, D_0D0060B0, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
+ draw_2d_texture_at(object->pos, object->orientation, object->sizeScaling, (u8 *) object->activeTLUT, object->activeTexture, common_vtx_hedgehog, 0x00000040, 0x00000040, 0x00000040, 0x00000020);
}
}
}
diff --git a/src/update_objects.c b/src/update_objects.c
index 02038fdc7..298ca5e02 100644
--- a/src/update_objects.c
+++ b/src/update_objects.c
@@ -2955,7 +2955,7 @@ void init_obj_lakitu_red_flag_countdown(s32 objectIndex, s32 arg1) {
D_8018D168 = 0;
}
init_texture_object(objectIndex, (u8 *) common_tlut_lakitu_countdown, gTextureLakituNoLights1, 0x38U, (u16) 0x00000048);
- gObjectList[objectIndex].vertex = D_0D005EB0;
+ gObjectList[objectIndex].vertex = common_vtx_lakitu;
gObjectList[objectIndex].sizeScaling = 0.15f;
set_object_flag_status_false(objectIndex, 0x00000010);
func_80072488(objectIndex);
@@ -3048,7 +3048,7 @@ void init_obj_lakitu_red_flag(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_checkered_flag, gTextureLakituCheckeredFlag01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
- temp_v0->vertex = D_0D006730;
+ temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3298,7 +3298,7 @@ void func_8007A060(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_second_lap, gTextureLakituSecondLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
- temp_v0->vertex = D_0D006730;
+ temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3346,7 +3346,7 @@ void func_8007A228(s32 objectIndex, s32 playerIndex) {
init_texture_object(objectIndex, common_tlut_lakitu_final_lap, gTextureLakituFinalLap01, 0x48U, (u16) 0x00000038);
temp_v0 = &gObjectList[objectIndex];
temp_v0->activeTexture = D_8018C028;
- temp_v0->vertex = D_0D006730;
+ temp_v0->vertex = common_vtx_also_lakitu;
temp_v0->pos[2] = 5000.0f;
temp_v0->pos[1] = 5000.0f;
temp_v0->pos[0] = 5000.0f;
@@ -3392,7 +3392,7 @@ void func_8007A3F0(s32 objectIndex, s32 arg1) {
func_800791F0(objectIndex, arg1);
init_texture_object(objectIndex, common_tlut_lakitu_reverse, gTextureLakituReverse01, 0x48U, (u16) 0x00000038);
gObjectList[objectIndex].activeTexture = D_8018C028;
- gObjectList[objectIndex].vertex = D_0D006730;
+ gObjectList[objectIndex].vertex = common_vtx_also_lakitu;
gObjectList[objectIndex].pos[2] = var;
gObjectList[objectIndex].pos[1] = var;
gObjectList[objectIndex].pos[0] = var;
@@ -6698,7 +6698,7 @@ void func_8008311C(s32 objectIndex, s32 arg1) {
temp_s0 = &gObjectList[objectIndex];
temp_s0->activeTLUT = d_course_yoshi_valley_hedgehog_tlut;
temp_s0->activeTexture = d_course_yoshi_valley_hedgehog;
- temp_s0->vertex = D_0D0060B0;
+ temp_s0->vertex = common_vtx_hedgehog;
temp_s0->sizeScaling = 0.2f;
temp_s0->itemDisplay = 0;
func_80072488(objectIndex);
@@ -6754,7 +6754,7 @@ void func_800833D0(s32 objectIndex, s32 arg1) {
break;
}
if (gObjectList[objectIndex].itemDisplay == 0) {
- gObjectList[objectIndex].vertex = D_0D0060B0;
+ gObjectList[objectIndex].vertex = common_vtx_hedgehog;
} else {
gObjectList[objectIndex].vertex = D_0D006130;
}
@@ -6897,7 +6897,7 @@ void func_80083A94(s32 objectIndex) {
void func_80083B0C(s32 objectIndex) {
init_texture_object(objectIndex, d_course_frappe_snowland_snowman_tlut, d_course_frappe_snowland_snowman_body, 0x40U, (u16) 0x00000040);
- gObjectList[objectIndex].vertex = D_0D0060B0;
+ gObjectList[objectIndex].vertex = common_vtx_hedgehog;
gObjectList[objectIndex].sizeScaling = 0.1f;
gObjectList[objectIndex].itemDisplay = 0;
func_80072488(objectIndex);