From 25d49df90fe1ab2c95c962d45ef146cb5cf0c794 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Fri, 6 Mar 2026 01:14:44 -0700 Subject: [PATCH] More Interp Fixes (#673) * Update render_player.c * Update render.inc.c * Update render.inc.c * Fix kart interp * Remove feature * Fix error --- src/actors/fake_item_box/render.inc.c | 35 +++- src/actors/item_box/render.inc.c | 38 +++- src/code_80005FD0.c | 12 -- src/code_80005FD0.h | 1 - src/engine/PlayerBombKart.cpp | 4 +- src/engine/PlayerBombKart.h | 2 +- src/engine/objects/BombKart.cpp | 67 ++++++- src/engine/objects/BombKart.h | 3 + src/render_objects.c | 245 -------------------------- src/render_objects.h | 10 -- src/render_player.c | 5 + 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) {