summaryrefslogtreecommitdiff
path: root/src/engine
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/engine
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/engine')
-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
4 files changed, 72 insertions, 4 deletions
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();