summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2026-03-06 01:14:44 -0700
committerGitHub <noreply@github.com>2026-03-06 01:14:44 -0700
commit25d49df90fe1ab2c95c962d45ef146cb5cf0c794 (patch)
treee74caf587e90be8467ba806ed5642746db7b9a66 /src
parent89cd738955bf4cbbcb3f50c4a678b8baeeb75bcb (diff)
More Interp Fixes (#673)
* Update render_player.c * Update render.inc.c * Update render.inc.c * Fix kart interp * Remove feature * Fix error
Diffstat (limited to 'src')
-rw-r--r--src/actors/fake_item_box/render.inc.c35
-rw-r--r--src/actors/item_box/render.inc.c38
-rw-r--r--src/code_80005FD0.c12
-rw-r--r--src/code_80005FD0.h1
-rw-r--r--src/engine/PlayerBombKart.cpp4
-rw-r--r--src/engine/PlayerBombKart.h2
-rw-r--r--src/engine/objects/BombKart.cpp67
-rw-r--r--src/engine/objects/BombKart.h3
-rw-r--r--src/render_objects.c245
-rw-r--r--src/render_objects.h10
-rw-r--r--src/render_player.c5
11 files changed, 139 insertions, 283 deletions
diff --git a/src/actors/fake_item_box/render.inc.c b/src/actors/fake_item_box/render.inc.c
index 0a65e2067..37182dd7c 100644
--- a/src/actors/fake_item_box/render.inc.c
+++ b/src/actors/fake_item_box/render.inc.c
@@ -51,14 +51,20 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
if (fakeItemBox->state != 2) {
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, common_model_fake_itembox);
+ FrameInterpolation_RecordCloseChild();
+
+ FrameInterpolation_RecordOpenChild("fake_item_box_part2", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+
mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
@@ -87,6 +93,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
}
#endif
gSPDisplayList(gDisplayListHead++, D_0D003090);
+ FrameInterpolation_RecordCloseChild();
} else {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
@@ -111,33 +118,43 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
+ FrameInterpolation_RecordCloseChild();
temp_f2_2 = 0.8f * thing;
temp_f12 = 0.5f * thing;
someVec[0] = temp_f2_2;
someVec[1] = 2.3f * thing;
someVec[2] = temp_f12;
+ FrameInterpolation_RecordOpenChild("fake_item_box_part3", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
-
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
+ FrameInterpolation_RecordCloseChild();
+
temp_f0_2 = -0.5f * thing;
someVec[0] = temp_f2_2;
someVec[1] = 1.2f * thing;
someVec[2] = temp_f0_2;
+ FrameInterpolation_RecordOpenChild("fake_item_box_part4", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
+ FrameInterpolation_RecordCloseChild();
+
if (!(fakeItemBox->someTimer & 1)) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
} else {
@@ -146,13 +163,18 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
someVec[0] = 0.0f;
someVec[1] = 1.8f * thing;
someVec[2] = -1.0f * thing;
+ FrameInterpolation_RecordOpenChild("fake_item_box_part5", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
-
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("fake_item_box_part6", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+
temp_f0_3 = -0.8f * thing;
someVec[0] = temp_f0_3;
someVec[1] = 0.6f * thing;
@@ -160,22 +182,25 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("fake_item_box_part7", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+
someVec[0] = temp_f0_3;
someVec[1] = temp_f2;
someVec[2] = temp_f12;
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
-
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
+ FrameInterpolation_RecordCloseChild();
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
- // @port Pop the transform id.
- FrameInterpolation_RecordCloseChild();
}
diff --git a/src/actors/item_box/render.inc.c b/src/actors/item_box/render.inc.c
index 5c217b060..3b864ad65 100644
--- a/src/actors/item_box/render.inc.c
+++ b/src/actors/item_box/render.inc.c
@@ -27,8 +27,6 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
f32 temp_f2_2;
f32 someMultiplier;
- FrameInterpolation_RecordOpenChild("itembox", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
-
temp_f0 = is_within_render_distance(camera->pos, item_box->pos, camera->rot[1], 0.0f, camera->fieldOfView,
4000000.0f);
if (CVarGetInteger("gNoCulling", 0) == 1) {
@@ -43,13 +41,18 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
someVec2[1] = item_box->resetDistance + 2.0f;
someVec2[2] = item_box->pos[2];
+ FrameInterpolation_RecordOpenChild("itembox", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D002EE8);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox2", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+
someRot[1] = item_box->rot[1] * 2;
someVec2[1] = item_box->pos[1];
@@ -57,25 +60,31 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
+ FrameInterpolation_RecordCloseChild();
}
if (item_box->state == 5) {
+ FrameInterpolation_RecordOpenChild("itembox3", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, itemBoxQuestionMarkModel);
+ FrameInterpolation_RecordCloseChild();
}
if (item_box->state != 3) {
-
+ FrameInterpolation_RecordOpenChild("itembox4", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
@@ -105,13 +114,14 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
#endif
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPDisplayList(gDisplayListHead++, D_0D003090);
-
+ FrameInterpolation_RecordCloseChild();
} else {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
gSPClearGeometryMode(gDisplayListHead++, G_CULL_BACK);
gDPSetBlendMask(gDisplayListHead++, 0xFF);
thing = item_box->someTimer;
+ FrameInterpolation_RecordOpenChild("itembox5", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (thing < 10.0f) {
someMultiplier = 1.0f;
@@ -131,10 +141,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003158);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox6", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f2_2 = 0.8f * thing;
temp_f12 = 0.5f * thing;
@@ -144,10 +157,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox7", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f0_2 = -0.5f * thing;
someVec1[0] = temp_f2_2;
@@ -157,10 +173,14 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003128);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox8", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+
if (!(item_box->someTimer & 1)) {
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2);
@@ -174,10 +194,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox9", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
temp_f0_3 = -0.8f * thing;
someVec1[0] = temp_f0_3;
@@ -187,10 +210,13 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D003188);
+ FrameInterpolation_RecordCloseChild();
+ FrameInterpolation_RecordOpenChild("itembox10", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
someVec1[0] = temp_f0_3;
someVec1[1] = temp_f2;
@@ -199,15 +225,15 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
add_translate_mat4_vec3f(someMatrix1, someMatrix2, someVec1);
if (!render_set_position(someMatrix2, 0)) {
+ FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, D_0D0030F8);
+ FrameInterpolation_RecordCloseChild();
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
}
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
}
- // @port Pop the transform id.
- FrameInterpolation_RecordCloseChild();
}
diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c
index 5949b589a..f0b524754 100644
--- a/src/code_80005FD0.c
+++ b/src/code_80005FD0.c
@@ -7930,18 +7930,6 @@ void func_8001C14C(void) {
}
}
-void render_bomb_karts_wrap(s32 cameraId) {
- if (IsPodiumCeremony()) {
- if (gBombKarts[0].waypointIndex >= 16) {
- render_bomb_karts(PLAYER_FOUR);
- }
- } else {
- if (gModeSelection == VERSUS) {
- render_bomb_karts(cameraId);
- }
- }
-}
-
UNUSED void func_8001C42C(void) {
if (D_800DDB20 == 0) {
if ((gControllerThree->buttonPressed & 0x20) != 0) {
diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h
index 7acb6e80b..83514f437 100644
--- a/src/code_80005FD0.h
+++ b/src/code_80005FD0.h
@@ -291,7 +291,6 @@ void func_8001BE78(void);
void func_8001C05C(void);
void func_8001C14C(void);
-void render_bomb_karts_wrap(s32);
void func_8001C42C(void);
/* This is where I'd put my static data, if I had any */
diff --git a/src/engine/PlayerBombKart.cpp b/src/engine/PlayerBombKart.cpp
index 42b18a0f2..322a4cb89 100644
--- a/src/engine/PlayerBombKart.cpp
+++ b/src/engine/PlayerBombKart.cpp
@@ -29,7 +29,7 @@ void PlayerBombKart::Draw(size_t playerId, s32 cameraId) { // render_player_bomb
surfaceHeight = player->unk_074;
PlayerBombKart::func_800563DC(cameraId, _primAlpha);
PlayerBombKart::func_8005669C(cameraId, _primAlpha);
- PlayerBombKart::func_800568A0(cameraId);
+ PlayerBombKart::LoadMtx(cameraId);
}
}
@@ -123,7 +123,7 @@ void PlayerBombKart::func_8005669C(s32 cameraId, s32 arg2) {
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
-void PlayerBombKart::func_800568A0(s32 cameraId) {
+void PlayerBombKart::LoadMtx(s32 cameraId) { // func_800568A0
Mat4 mtx;
Player* player;
diff --git a/src/engine/PlayerBombKart.h b/src/engine/PlayerBombKart.h
index eb10bc856..a2b77c311 100644
--- a/src/engine/PlayerBombKart.h
+++ b/src/engine/PlayerBombKart.h
@@ -30,7 +30,7 @@ public:
void func_800563DC(s32 cameraId, s32 arg2);
void func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id);
void func_8005669C(s32 cameraId, s32 arg2);
- void func_800568A0(s32 cameraId);
+ void LoadMtx(s32 cameraId);
private:
static u32 vec[3][3];
static size_t _count;
diff --git a/src/engine/objects/BombKart.cpp b/src/engine/objects/BombKart.cpp
index fd8d65efd..8009effef 100644
--- a/src/engine/objects/BombKart.cpp
+++ b/src/engine/objects/BombKart.cpp
@@ -380,7 +380,7 @@ void OBombKart::Draw(s32 cameraId) {
D_80183E80[0] = 0;
D_80183E80[1] = func_800418AC(Pos[0], Pos[2], camera->pos);
D_80183E80[2] = 0x8000;
- func_800563DC(_objectIndex, cameraId, 0x000000FF);
+ OBombKart::func_800563DC(cameraId, 0x000000FF);
OBombKart::SomeRender(cameraId, camera->pos);
if (((u32) temp_s4 < 0x4E21U) && (state != OBombKart::States::EXPLODE)) {
OBombKart::LoadMtx(cameraId);
@@ -393,6 +393,71 @@ void OBombKart::DrawBattle(s32 cameraId) {
}
+void OBombKart::func_800563DC(s32 cameraId, s32 arg2) {
+ s32 temp_s0;
+ s32 temp_v0;
+ s32 residue;
+ Camera* camera;
+ Object* object;
+
+ camera = &camera1[cameraId];
+ object = &gObjectList[_objectIndex];
+ residue = D_801655CC % 4U;
+ D_80183E40[0] = object->pos[0];
+ D_80183E40[1] = object->pos[1] + 1.0;
+ D_80183E40[2] = object->pos[2];
+ D_80183E80[0] = 0;
+ D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
+ D_80183E80[2] = 0x8000;
+ FrameInterpolation_RecordOpenChild("bomb_kart2", (_idx << 4) | cameraId);
+ rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007E98);
+ func_8004B310(arg2);
+
+ int heigh = 32;
+ int width = 32;
+
+ gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_bomb);
+ rsp_load_texture((u8*) common_texture_bomb[residue], width, heigh);
+ gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005AE0, 4, 0);
+ gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
+ gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
+
+ temp_s0 = D_8018D400;
+ gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D007B00);
+ FrameInterpolation_RecordCloseChild();
+ func_8004B414(0, 0, 0, arg2);
+ D_80183E40[1] = D_80183E40[1] + 4.0;
+ D_80183E80[2] = 0;
+ OBombKart::func_800562E4(cameraId, temp_s0 % 3, temp_s0 % 4, arg2, 0);
+ temp_v0 = temp_s0 + 1;
+ D_80183E80[2] = 0x6000;
+ OBombKart::func_800562E4(cameraId, temp_v0 % 3, temp_v0 % 4, arg2, 1);
+ temp_v0 = temp_s0 + 2;
+ D_80183E80[2] = 0xA000;
+ OBombKart::func_800562E4(cameraId, temp_v0 % 3, temp_v0 % 4, arg2, 2);
+ gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
+}
+
+u32 OBombKart::vec[3][3] = {
+ { 255, 255, 255 },
+ { 255, 255, 0 },
+ { 255, 0, 0 },
+};
+
+void OBombKart::func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id) {
+ D_80165860 = vec[arg0][0]; // used to be D_800E46F8A
+ D_8016586C = vec[arg0][1];
+ D_80165878 = vec[arg0][2];
+ func_8004B138(D_80165860, D_8016586C, D_80165878, arg2);
+ FrameInterpolation_RecordOpenChild("bomb_kart_spark", (id << 12) | (_idx << 5) | cameraId);
+ rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
+ func_80044BF8((uint8_t*)common_texture_particle_spark[arg1], 32, 32);
+ gSPVertex(gDisplayListHead++, (uintptr_t)D_0D005AE0, 4, 0);
+ gSPDisplayList(gDisplayListHead++, (Gfx*)common_rectangle_display);
+ FrameInterpolation_RecordCloseChild();
+}
+
void OBombKart::SomeRender(s32 cameraId, Vec3f arg1) {
D_80183E80[0] = 0;
D_80183E80[2] = 0x8000;
diff --git a/src/engine/objects/BombKart.h b/src/engine/objects/BombKart.h
index c6fb03abd..a1bb88c17 100644
--- a/src/engine/objects/BombKart.h
+++ b/src/engine/objects/BombKart.h
@@ -85,6 +85,8 @@ class OBombKart : public OObject {
virtual void Translate(FVector pos) override;
virtual void DrawEditorProperties() override;
void DrawBattle(s32 cameraId);
+ void func_800563DC(s32 cameraId, s32 arg2);
+ void func_800562E4(s32 cameraId, s32 arg0, s32 arg1, s32 arg2, s32 id);
void SomeRender(s32 cameraId, Vec3f arg1);
void LoadMtx(s32 cameraId);
void Waypoint(s32 screenId);
@@ -92,6 +94,7 @@ class OBombKart : public OObject {
OBombKart::States Behaviour = OBombKart::States::COUNTERCLOCKWISE;
float SpeedB = 2.7f;
private:
+ static u32 vec[3][3];
static size_t _count;
s32 _idx;
Player* FindTarget();
diff --git a/src/render_objects.c b/src/render_objects.c
index a14c3d350..01f380bfa 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -3973,110 +3973,10 @@ void render_object_neon(s32 cameraId) {
}
}
-Vec3iu D_800E46F8A[] = {
- { 255, 255, 255 },
- { 255, 255, 0 },
- { 255, 0, 0 },
-};
u8 D_800E471CA[] = {
0, 1, 2, 3, 2, 1, 0,
};
-void func_800562E4(s32 arg0, s32 arg1, s32 arg2) {
-
- // Vec3iu *A_800E46F8 = LOAD_ASSET(D_800E46F8);
-
- D_80165860 = D_800E46F8A[arg0][0];
- D_8016586C = D_800E46F8A[arg0][1];
- D_80165878 = D_800E46F8A[arg0][2];
- func_8004B138(D_80165860, D_8016586C, D_80165878, arg2);
- rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
- func_80044BF8(common_texture_particle_spark[arg1], 32, 32);
- gSPVertex(gDisplayListHead++, D_0D005AE0, 4, 0);
- gSPDisplayList(gDisplayListHead++, common_rectangle_display);
-}
-
-void func_800563DC(s32 objectIndex, s32 cameraId, s32 arg2) {
- s32 temp_s0;
- s32 temp_v0;
- s32 residue;
- Camera* camera;
- Object* object;
-
- camera = &camera1[cameraId];
- object = &gObjectList[objectIndex];
- residue = D_801655CC % 4U;
- D_80183E40[0] = object->pos[0];
- D_80183E40[1] = object->pos[1] + 1.0;
- D_80183E40[2] = object->pos[2];
- D_80183E80[0] = 0;
- D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
- D_80183E80[2] = 0x8000;
- rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.2f);
- gSPDisplayList(gDisplayListHead++, D_0D007E98);
- func_8004B310(arg2);
-
- int heigh = 32;
- int width = 32;
-
- gDPLoadTLUT_pal256(gDisplayListHead++, common_tlut_bomb);
- rsp_load_texture((u8*) common_texture_bomb[residue], width, heigh);
- gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005AE0, 4, 0);
- gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
- gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
-
- temp_s0 = D_8018D400;
- gSPDisplayList(gDisplayListHead++, D_0D007B00);
- func_8004B414(0, 0, 0, arg2);
- D_80183E40[1] = D_80183E40[1] + 4.0;
- D_80183E80[2] = 0;
- func_800562E4(temp_s0 % 3, temp_s0 % 4, arg2);
- temp_v0 = temp_s0 + 1;
- D_80183E80[2] = 0x6000;
- func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
- temp_v0 = temp_s0 + 2;
- D_80183E80[2] = 0xA000;
- func_800562E4(temp_v0 % 3, temp_v0 % 4, arg2);
- gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
-}
-
-void func_8005669C(s32 objectIndex, UNUSED s32 arg1, s32 arg2) {
- gSPDisplayList(gDisplayListHead++, D_0D0079E8);
- func_8004B310(arg2);
- load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
- D_80183E40[1] = gObjectList[objectIndex].pos[1] - 2.0;
- D_80183E40[0] = gObjectList[objectIndex].pos[0] + 2.0;
- D_80183E40[2] = gObjectList[objectIndex].pos[2] + 2.0;
- func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E40[0] = gObjectList[objectIndex].pos[0] + 2.0;
- D_80183E40[2] = gObjectList[objectIndex].pos[2] - 2.0;
- func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E40[0] = gObjectList[objectIndex].pos[0] - 2.0;
- D_80183E40[2] = gObjectList[objectIndex].pos[2] - 2.0;
- func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E40[0] = gObjectList[objectIndex].pos[0] - 2.0;
- D_80183E40[2] = gObjectList[objectIndex].pos[2] + 2.0;
- func_800431B0(D_80183E40, D_80183E80, 0.15f, common_vtx_rectangle);
- gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
-}
-
-Mat4 mtx;
-void func_800568A0(s32 objectIndex, s32 playerId) {
- Player* player;
-
- player = &gPlayerOne[playerId];
- D_80183E50[0] = gObjectList[objectIndex].pos[0];
- D_80183E50[1] = gObjectList[objectIndex].surfaceHeight + 0.8;
- D_80183E50[2] = gObjectList[objectIndex].pos[2];
- set_transform_matrix(mtx, player->collision.orientationVector, D_80183E50, 0U, 0.5f);
- // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mtx);
- // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]),
- // G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
-
- AddHudMatrix(mtx, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
- gSPDisplayList(gDisplayListHead++, D_0D007B98);
-}
-
void func_800569F4(s32 playerIndex) {
CM_DisplayBattleBombKart(playerIndex, 0);
}
@@ -4090,151 +3990,6 @@ void func_80056A94(s32 playerIndex) {
CM_DisplayBattleBombKart(playerIndex, 0);
}
-void render_battle_bomb_karts(s32 cameraId) {
- Player* temp_v0;
- s32 temp_s1;
- s32 temp_s0;
- s32 payerId;
- Object* object;
-
- for (payerId = 0; payerId < NUM_BOMB_KARTS_BATTLE; payerId++) {
- temp_s0 = gIndexObjectBombKart[payerId];
- object = &gObjectList[temp_s0];
- if (object->state != 0) {
- temp_s1 = object->primAlpha;
- temp_v0 = &gPlayerOne[payerId];
- object->pos[0] = temp_v0->pos[0];
- object->pos[1] = temp_v0->pos[1] - 2.0;
- object->pos[2] = temp_v0->pos[2];
- object->surfaceHeight = temp_v0->unk_074;
- func_800563DC(temp_s0, cameraId, temp_s1);
- func_8005669C(temp_s0, cameraId, temp_s1);
- func_800568A0(temp_s0, cameraId);
- }
- }
-}
-
-void func_80056BF0(s32 bombIndex) {
- UNUSED s32 stackPadding;
- u8 thing;
- s32 temp_s0;
- s32 temp_v0;
- u8* bombFrame;
- BombKart sp40 = gBombKarts[bombIndex];
-
- temp_v0 = D_801655CC % 6U;
- thing = D_800E471CA[temp_v0];
- bombFrame = common_texture_bomb[thing];
- D_80183E40[0] = sp40.bombPos[0];
- D_80183E40[1] = sp40.bombPos[1] + 1.0;
- D_80183E40[2] = sp40.bombPos[2];
-
- rsp_set_matrix_transformation(D_80183E40, D_80183E80, 0.25f);
- gSPDisplayList(gDisplayListHead++, D_0D007D78);
- gDPLoadTLUT_pal256(gDisplayListHead++, (u8*) common_tlut_bomb);
- rsp_load_texture(bombFrame, 0x20, 0x20);
- gSPVertex(gDisplayListHead++, D_0D005AE0, 4, 0);
- gSPDisplayList(gDisplayListHead++, common_rectangle_display);
- gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
-
- temp_s0 = D_8018D400;
- gSPDisplayList(gDisplayListHead++, D_0D007B00);
- func_8004B414(0, 0, 0, 0xFF);
- D_80183E40[1] = sp40.bombPos[1] + 5.0;
- D_80183E80[2] = 0;
- func_800562E4((s32) temp_s0 % 3, temp_s0 % 4, 0xFFU);
- temp_v0 = temp_s0 + 1;
- D_80183E80[2] = 0x6000;
- func_800562E4(temp_v0 % 3, temp_v0 % 4, 0xFFU);
- temp_v0 = temp_s0 + 2;
- D_80183E80[2] = 0xA000;
- func_800562E4(temp_v0 % 3, temp_v0 % 4, 0xFFU);
-}
-
-void func_80056E24(s32 bombIndex, Vec3f arg1) {
- UNUSED s32 stackPadding[2];
- BombKart sp2C = gBombKarts[bombIndex];
-
- D_80183E80[0] = 0;
- D_80183E80[2] = 0x8000;
- gSPDisplayList(gDisplayListHead++, D_0D0079C8);
- load_texture_block_rgba16_mirror((u8*) D_0D02AA58, 0x00000010, 0x00000010);
- D_80183E80[1] = func_800418AC(sp2C.wheel1Pos[0], sp2C.wheel1Pos[2], arg1);
- func_800431B0(sp2C.wheel1Pos, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E80[1] = func_800418AC(sp2C.wheel2Pos[0], sp2C.wheel2Pos[2], arg1);
- func_800431B0(sp2C.wheel2Pos, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E80[1] = func_800418AC(sp2C.wheel3Pos[0], sp2C.wheel3Pos[2], arg1);
- func_800431B0(sp2C.wheel3Pos, D_80183E80, 0.15f, common_vtx_rectangle);
- D_80183E80[1] = func_800418AC(sp2C.wheel4Pos[0], sp2C.wheel4Pos[2], arg1);
- func_800431B0(sp2C.wheel4Pos, D_80183E80, 0.15f, common_vtx_rectangle);
- gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
-}
-
-void func_80056FCC(s32 bombIndex) {
- Mat4 mat;
- BombKart* temp_v0;
-
- temp_v0 = &gBombKarts[bombIndex];
- D_80183E50[0] = temp_v0->bombPos[0];
- D_80183E50[1] = temp_v0->yPos + 1.0;
- D_80183E50[2] = temp_v0->bombPos[2];
- set_transform_matrix(mat, gBombKartCollision[bombIndex].orientationVector, D_80183E50, 0U, 0.5f);
- // convert_to_fixed_point_matrix(&gGfxPool->mtxHud[gMatrixHudCount], mat);
- // gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(&gGfxPool->mtxHud[gMatrixHudCount++]),
- // G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
- AddHudMatrix(mat, G_MTX_LOAD | G_MTX_NOPUSH | G_MTX_MODELVIEW);
- gSPDisplayList(gDisplayListHead++, D_0D007B98);
-}
-
-void render_bomb_karts(s32 cameraId) {
- Camera* camera;
- s32 objectIndex;
- s32 temp_s4;
- s32 i;
- s32 state;
- BombKart* var_s1_2;
-
- if (gGamestate == 5) {
- cameraId = 0;
- }
- camera = &camera1[cameraId];
- if (cameraId == PLAYER_ONE) {
- for (i = 0; i < NUM_BOMB_KARTS_VERSUS; i++) {
- objectIndex = gIndexObjectBombKart[i];
- if (is_obj_flag_status_active(objectIndex, 0x00200000) != 0) {
- gBombKarts[i].unk_4A = 0;
- } else if (gGamestate != 5) {
- gBombKarts[i].unk_4A = 1;
- }
- clear_object_flag(objectIndex, 0x00200000);
- }
- }
-
- for (i = 0; i < NUM_BOMB_KARTS_VERSUS; i++) {
- var_s1_2 = &gBombKarts[i];
- // huh???
- state = var_s1_2->state;
- if (var_s1_2->state != BOMB_STATE_INACTIVE) {
- objectIndex = gIndexObjectBombKart[i];
- gObjectList[objectIndex].pos[0] = var_s1_2->bombPos[0];
- gObjectList[objectIndex].pos[1] = var_s1_2->bombPos[1];
- gObjectList[objectIndex].pos[2] = var_s1_2->bombPos[2];
- temp_s4 = func_8008A364(objectIndex, cameraId, 0x31C4U, 0x000001F4);
- if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
- set_object_flag(objectIndex, 0x00200000);
- D_80183E80[0] = 0;
- D_80183E80[1] = func_800418AC(var_s1_2->bombPos[0], var_s1_2->bombPos[2], camera->pos);
- D_80183E80[2] = 0x8000;
- func_800563DC(objectIndex, cameraId, 0x000000FF);
- func_80056E24(i, camera->pos);
- if (((u32) temp_s4 < 0x4E21U) && (state != BOMB_STATE_EXPLODED)) {
- func_80056FCC(i);
- }
- }
- }
- }
-}
-
UNUSED void func_80057330(void) {
}
diff --git a/src/render_objects.h b/src/render_objects.h
index 083481776..ce385d2e5 100644
--- a/src/render_objects.h
+++ b/src/render_objects.h
@@ -10,7 +10,6 @@ extern "C" {
#endif
void func_80045738(u8*, u8*, s32, s32);
-void render_bomb_karts(s32);
void func_800431B0(Vec3f, Vec3su, f32, Vtx*);
void func_80043220(Vec3f, Vec3su, f32, Gfx*);
void func_80043328(Vec3f, Vec3su, f32, Gfx*);
@@ -368,18 +367,9 @@ void func_80055F48(s32);
void func_80056160(s32);
void render_object_neon(s32);
-void func_800562E4(s32, s32, s32);
-void func_800563DC(s32, s32, s32);
-void func_800568A0(s32, s32);
-void func_8005669C(s32, s32, s32);
void func_800569F4(s32);
void func_80056A40(s32, s32);
void func_80056A94(s32);
-void render_battle_bomb_karts(s32);
-void func_80056E24(s32, Vec3f);
-void func_80056FCC(s32);
-
-void render_bomb_karts(s32);
void func_8005762C(s32*, s32*, s32, u32);
void func_80057330(void);
void func_80057338(void);
diff --git a/src/render_player.c b/src/render_player.c
index 2aa5bdbf1..cacac6666 100644
--- a/src/render_player.c
+++ b/src/render_player.c
@@ -1446,6 +1446,9 @@ void render_ghost(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
} else {
spC2 = 0x0070;
}
+
+ FrameInterpolation_RecordOpenChild("player_ghost", (playerId << 4) | screenId);
+
thing = (u16) (player->unk_048[screenId] - player->rotation[1]);
spD4[0] = (-(s16) (sins(thing) * (0.0f * 0.0f)) * 0.8);
spD4[1] = player->unk_048[screenId];
@@ -1491,6 +1494,8 @@ void render_ghost(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
gSP2Triangles(gDisplayListHead++, 4, 5, 6, 4, 4, 6, 7, 4);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
+
+ FrameInterpolation_RecordCloseChild();
}
void func_80025DE8(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {