summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2026-03-06 20:10:07 -0700
committerGitHub <noreply@github.com>2026-03-06 20:10:07 -0700
commit132357d9fb50d7962518e10b22db358c85d87ba5 (patch)
tree428671c5f9d888bb6905fe20c07d26a70430b392
parent25d49df90fe1ab2c95c962d45ef146cb5cf0c794 (diff)
Big Interpolation Overhaul (#674)
* Fix FI * FI statue * Intepr fixes * Improve * More interp * Fix compile * More interp * Fix text
-rw-r--r--src/actors/fake_item_box/render.inc.c22
-rw-r--r--src/actors/falling_rock/render.inc.c2
-rw-r--r--src/actors/falling_rock/update.inc.c2
-rw-r--r--src/actors/item_box/render.inc.c28
-rw-r--r--src/actors/yoshi_egg/render.inc.c10
-rw-r--r--src/code_800029B0.c6
-rw-r--r--src/code_80057C60.c48
-rw-r--r--src/engine/Smoke.cpp4
-rw-r--r--src/engine/actors/BowserStatue.cpp6
-rw-r--r--src/engine/actors/BowserStatue.h2
-rw-r--r--src/engine/actors/FallingRock.cpp8
-rw-r--r--src/engine/actors/FallingRock.h3
-rw-r--r--src/engine/actors/Finishline.cpp5
-rw-r--r--src/engine/actors/Finishline.h1
-rw-r--r--src/engine/actors/MarioSign.cpp7
-rw-r--r--src/engine/actors/MarioSign.h7
-rw-r--r--src/engine/actors/Text.cpp2
-rw-r--r--src/engine/actors/WarioSign.cpp7
-rw-r--r--src/engine/actors/WarioSign.h7
-rw-r--r--src/engine/objects/Bat.cpp4
-rw-r--r--src/engine/objects/Boos.cpp10
-rw-r--r--src/engine/objects/Boos.h2
-rw-r--r--src/engine/objects/CheepCheep.cpp3
-rw-r--r--src/engine/objects/GrandPrixBalloons.cpp4
-rw-r--r--src/engine/objects/GrandPrixBalloons.h2
-rw-r--r--src/engine/objects/Lakitu.cpp9
-rw-r--r--src/engine/objects/Penguin.cpp2
-rw-r--r--src/engine/objects/Thwomp.cpp9
-rw-r--r--src/engine/objects/TrashBin.cpp4
-rw-r--r--src/engine/particles/StarEmitter.cpp6
-rw-r--r--src/engine/sky/SkyCloud.cpp2
-rw-r--r--src/engine/sky/SkySnow.cpp2
-rw-r--r--src/engine/sky/SkyStar.cpp2
-rw-r--r--src/engine/tracks/CustomTrack.cpp4
-rw-r--r--src/racing/actors.c12
-rw-r--r--src/racing/skybox_and_splitscreen.c2
-rw-r--r--src/render_objects.c65
-rw-r--r--src/render_objects.h8
38 files changed, 194 insertions, 135 deletions
diff --git a/src/actors/fake_item_box/render.inc.c b/src/actors/fake_item_box/render.inc.c
index 37182dd7c..af0ca4d54 100644
--- a/src/actors/fake_item_box/render.inc.c
+++ b/src/actors/fake_item_box/render.inc.c
@@ -25,7 +25,15 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
f32 temp_f2_2;
f32 someMultiplier;
- FrameInterpolation_RecordOpenChild("Fake Item Box", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+ size_t actorIdx = CM_FindActorIndex((struct Actor*)fakeItemBox);
+ if (-1 == actorIdx) {
+ printf("[render_actor_fake_item_box] Could not find fake item box for FI, skipping!\n");
+ return;
+ }
+
+ u32 uniqueIdentifier = TAG_ITEM_ADDR((actorIdx << 4) | (camera - cameras));
+
+ FrameInterpolation_RecordOpenChild("fake_item_box", uniqueIdentifier);
if (is_within_render_distance(camera->pos, fakeItemBox->pos, camera->rot[1], 2500.0f, camera->fieldOfView,
1000000.0f) < 0 &&
@@ -58,7 +66,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
gSPDisplayList(gDisplayListHead++, common_model_fake_itembox);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("fake_item_box_part2", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part2", uniqueIdentifier);
mtxf_pos_rotation_xyz(someMatrix2, fakeItemBox->pos, fakeItemBox->rot);
mtxf_scale(someMatrix2, fakeItemBox->sizeScaling);
@@ -129,7 +137,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
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));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part3", uniqueIdentifier);
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
@@ -144,7 +152,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
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));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part4", uniqueIdentifier);
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
if (!render_set_position(someMatrix3, 0)) {
@@ -163,7 +171,7 @@ 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));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part5", uniqueIdentifier);
add_translate_mat4_vec3f(someMatrix2, someMatrix3, someVec);
@@ -173,7 +181,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
}
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("fake_item_box_part6", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part6", uniqueIdentifier);
temp_f0_3 = -0.8f * thing;
someVec[0] = temp_f0_3;
@@ -188,7 +196,7 @@ void render_actor_fake_item_box(Camera* camera, struct FakeItemBox* fakeItemBox)
gSPDisplayList(gDisplayListHead++, D_0D003188);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("fake_item_box_part7", TAG_ITEM_ADDR((((struct Actor*)fakeItemBox) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("fake_item_box_part7", uniqueIdentifier);
someVec[0] = temp_f0_3;
someVec[1] = temp_f2;
diff --git a/src/actors/falling_rock/render.inc.c b/src/actors/falling_rock/render.inc.c
index 8b262cc35..b3c9da9a1 100644
--- a/src/actors/falling_rock/render.inc.c
+++ b/src/actors/falling_rock/render.inc.c
@@ -17,6 +17,8 @@ void render_actor_falling_rock(Camera* camera, struct FallingRock* rock) {
f32 height;
UNUSED s32 pad[4];
+ return; // No longer used. Use the C++ actor!
+
if (rock->respawnTimer != 0) {
return;
}
diff --git a/src/actors/falling_rock/update.inc.c b/src/actors/falling_rock/update.inc.c
index 434d7c2a7..a0605a169 100644
--- a/src/actors/falling_rock/update.inc.c
+++ b/src/actors/falling_rock/update.inc.c
@@ -58,6 +58,8 @@ void update_actor_falling_rocks(struct FallingRock* rock) {
f32 pad0;
f32 pad1;
+ return; // No longer used! Use C++ actor
+
if (rock->respawnTimer != 0) {
rock->respawnTimer -= 1;
return;
diff --git a/src/actors/item_box/render.inc.c b/src/actors/item_box/render.inc.c
index 3b864ad65..1c3e24e62 100644
--- a/src/actors/item_box/render.inc.c
+++ b/src/actors/item_box/render.inc.c
@@ -27,6 +27,14 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
f32 temp_f2_2;
f32 someMultiplier;
+ size_t actorIdx = CM_FindActorIndex((struct Actor*)item_box);
+ if (-1 == actorIdx) {
+ printf("[render_actor_item_box] Could not find item box for FI, skipping!\n");
+ return;
+ }
+
+ u32 uniqueIdentifier = TAG_ITEM_ADDR((actorIdx << 4) | (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) {
@@ -41,7 +49,7 @@ 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));
+ FrameInterpolation_RecordOpenChild("itembox", uniqueIdentifier);
mtxf_pos_rotation_xyz(someMatrix1, someVec2, someRot);
if (!render_set_position(someMatrix1, 0)) {
@@ -51,7 +59,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D002EE8);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox2", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox2", uniqueIdentifier);
someRot[1] = item_box->rot[1] * 2;
@@ -68,7 +76,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
FrameInterpolation_RecordCloseChild();
}
if (item_box->state == 5) {
- FrameInterpolation_RecordOpenChild("itembox3", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox3", uniqueIdentifier);
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
@@ -80,7 +88,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
FrameInterpolation_RecordCloseChild();
}
if (item_box->state != 3) {
- FrameInterpolation_RecordOpenChild("itembox4", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox4", uniqueIdentifier);
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (!render_set_position(someMatrix1, 0)) {
@@ -121,7 +129,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gDPSetBlendMask(gDisplayListHead++, 0xFF);
thing = item_box->someTimer;
- FrameInterpolation_RecordOpenChild("itembox5", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox5", uniqueIdentifier);
mtxf_pos_rotation_xyz(someMatrix1, item_box->pos, item_box->rot);
if (thing < 10.0f) {
someMultiplier = 1.0f;
@@ -147,7 +155,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D003158);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox6", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox6", uniqueIdentifier);
temp_f2_2 = 0.8f * thing;
temp_f12 = 0.5f * thing;
@@ -163,7 +171,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D0031B8);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox7", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox7", uniqueIdentifier);
temp_f0_2 = -0.5f * thing;
someVec1[0] = temp_f2_2;
@@ -179,7 +187,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D003128);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox8", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox8", uniqueIdentifier);
if (!(item_box->someTimer & 1)) {
@@ -200,7 +208,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D0031E8);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox9", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox9", uniqueIdentifier);
temp_f0_3 = -0.8f * thing;
someVec1[0] = temp_f0_3;
@@ -216,7 +224,7 @@ void render_actor_item_box(Camera* camera, struct ItemBox* item_box) {
gSPDisplayList(gDisplayListHead++, D_0D003188);
FrameInterpolation_RecordCloseChild();
- FrameInterpolation_RecordOpenChild("itembox10", TAG_ITEM_ADDR((((struct Actor*)item_box) - gActorList) << 5) | (camera - cameras));
+ FrameInterpolation_RecordOpenChild("itembox10", uniqueIdentifier);
someVec1[0] = temp_f0_3;
someVec1[1] = temp_f2;
diff --git a/src/actors/yoshi_egg/render.inc.c b/src/actors/yoshi_egg/render.inc.c
index a9b8234d4..3d8a35e51 100644
--- a/src/actors/yoshi_egg/render.inc.c
+++ b/src/actors/yoshi_egg/render.inc.c
@@ -19,6 +19,12 @@ void render_actor_yoshi_egg(Camera* camera, Mat4 arg1, struct YoshiValleyEgg* eg
Vec3f sp54;
f32 temp_f0;
+ size_t actorIdx = CM_FindActorIndex((struct Actor*) egg);
+ if (-1 == actorIdx) {
+ printf("[render_actor_yoshi_egg] Could not find actor for FI, skipping\n");
+ return;
+ }
+
if (gGamestate != CREDITS_SEQUENCE) {
temp_f0 = is_within_render_distance(camera->pos, egg->pos, camera->rot[1], 200.0f, camera->fieldOfView,
16000000.0f);
@@ -53,7 +59,7 @@ void render_actor_yoshi_egg(Camera* camera, Mat4 arg1, struct YoshiValleyEgg* eg
sp5C[1] = egg->eggRot;
sp5C[2] = 0;
- FrameInterpolation_RecordOpenChild("yoshi_egg", TAG_OBJECT(egg));
+ FrameInterpolation_RecordOpenChild("yoshi_egg", TAG_OBJECT((actorIdx << 4) | camera->cameraId));
mtxf_pos_rotation_xyz(sp60, egg->pos, sp5C);
if (render_set_position(sp60, 0) == 0) {
@@ -68,7 +74,7 @@ void render_actor_yoshi_egg(Camera* camera, Mat4 arg1, struct YoshiValleyEgg* eg
arg1[3][1] = egg->pos[1];
arg1[3][2] = egg->pos[2];
- FrameInterpolation_RecordOpenChild("yoshi_egg2", TAG_OBJECT(egg));
+ FrameInterpolation_RecordOpenChild("yoshi_egg2", TAG_OBJECT((actorIdx << 4) | camera->cameraId));
if (render_set_position(arg1, 0) != 0) {
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
diff --git a/src/code_800029B0.c b/src/code_800029B0.c
index 42f9c279a..4d68b49de 100644
--- a/src/code_800029B0.c
+++ b/src/code_800029B0.c
@@ -153,11 +153,11 @@ f32 gWaterLevel;
f32 gWaterVelocity;
s16 gPlayerPositionLUT[8]; // Player index at each position
u16 gNumPermanentActors;
-s32 code_800029B0_bss_pad2[44];
+//s32 code_800029B0_bss_pad2[44];
-struct Actor gActorList[100];
+//struct Actor gActorList[100]; use CM_FindActorIndex(actor) instead
//! @warning todo: Is this apart of the actor array?
-UNUSED u8 D_80162578[sizeof(struct Actor)];
+//UNUSED u8 D_80162578[sizeof(struct Actor)];
s16 gDebugPathCount;
s16 sIsController1Unplugged;
diff --git a/src/code_80057C60.c b/src/code_80057C60.c
index 948285d77..9a45ea57d 100644
--- a/src/code_80057C60.c
+++ b/src/code_80057C60.c
@@ -562,18 +562,18 @@ void render_object_for_player(s32 cameraId) {
}
}
-void render_snowing_effect(s32 playerId) {
+void render_snowing_effect(s32 cameraId) {
if (IsFrappeSnowland()) {
if (gGamestate != 9) {
if ((D_8015F894 == 0) && (gPlayerCountSelection1 == 1)) {
- render_object_snowflakes_particles();
+ render_object_snowflakes_particles(cameraId);
}
} else {
- render_object_snowflakes_particles();
+ render_object_snowflakes_particles(cameraId);
}
}
if (CM_GetProps()->LakituTowType == 1) {
- render_ice_block(playerId);
+ render_ice_block(cameraId);
}
}
@@ -4765,7 +4765,7 @@ void func_8006538C(Player* player, s8 arg1, s16 arg2, s8 arg3) {
}
}
-void func_800658A0(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
+void func_800658A0(Player* player, s8 playerId, s16 idx, s8 screenId) {
Vec3f sp54;
Vec3s sp4C;
s16 red;
@@ -4773,24 +4773,26 @@ void func_800658A0(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
s16 blue;
s16 alpha;
- if (player->particlePool0[arg2].isAlive == 1) {
- red = player->particlePool0[arg2].red;
- green = player->particlePool0[arg2].green;
- blue = player->particlePool0[arg2].blue;
- alpha = player->particlePool0[arg2].alpha;
- sp54[0] = player->particlePool0[arg2].pos[0];
- sp54[1] = player->particlePool0[arg2].pos[1];
- sp54[2] = player->particlePool0[arg2].pos[2];
+ if (player->particlePool0[idx].isAlive == 1) {
+ red = player->particlePool0[idx].red;
+ green = player->particlePool0[idx].green;
+ blue = player->particlePool0[idx].blue;
+ alpha = player->particlePool0[idx].alpha;
+ sp54[0] = player->particlePool0[idx].pos[0];
+ sp54[1] = player->particlePool0[idx].pos[1];
+ sp54[2] = player->particlePool0[idx].pos[2];
sp4C[0] = 0;
- sp4C[1] = player->unk_048[arg3];
+ sp4C[1] = player->unk_048[screenId];
sp4C[2] = 0;
- func_800652D4(sp54, sp4C, player->particlePool0[arg2].scale * player->size);
+ FrameInterpolation_RecordOpenChild("some_ply_part4", (idx << 8) | (playerId << 4) | screenId);
+ func_800652D4(sp54, sp4C, player->particlePool0[idx].scale * player->size);
gSPDisplayList(gDisplayListHead++, D_0D008DB8);
gDPLoadTextureBlock(gDisplayListHead++, D_8018D48C, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 32, 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);
func_8004B35C(red, green, blue, alpha);
gSPDisplayList(gDisplayListHead++, D_0D008E48);
+ FrameInterpolation_RecordCloseChild();
gMatrixEffectCount += 1;
}
}
@@ -4958,7 +4960,7 @@ void func_800664E0(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
}
}
-void func_80066714(Player* player, UNUSED s32 arg1, s16 arg2, s8 arg3) {
+UNUSED void func_80066714(Player* player, UNUSED s32 arg1, s16 arg2, s8 arg3) {
Vec3f sp5C;
Vec3s sp54;
s16 red;
@@ -5147,7 +5149,7 @@ void func_80067280(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
}
}
-void render_player_boost_spark_particles(Player* player, UNUSED s8 arg1, s16 arg2, s8 arg3) {
+void render_player_boost_spark_particles(Player* player, s8 playerId, s16 arg2, s8 screenId) {
Vec3f sp8C;
Vec3s sp84;
UNUSED s32 stackPadding[4];
@@ -5157,8 +5159,9 @@ void render_player_boost_spark_particles(Player* player, UNUSED s8 arg1, s16 arg
sp8C[1] = player->particlePool3[arg2].pos[1];
sp8C[2] = player->particlePool3[arg2].pos[2];
sp84[0] = 0;
- sp84[1] = player->unk_048[arg3];
+ sp84[1] = player->unk_048[screenId];
sp84[2] = 0;
+ FrameInterpolation_RecordOpenChild("boost_spark_particle", TAG_SMOKE_DUST((arg2 << 8) | (playerId << 4) | screenId));
func_800652D4(sp8C, sp84, player->particlePool3[arg2].scale * player->size);
if (player->particlePool3[arg2].unk_010 == 1) {
gSPDisplayList(gDisplayListHead++, D_0D008DB8);
@@ -5175,6 +5178,7 @@ void render_player_boost_spark_particles(Player* player, UNUSED s8 arg1, s16 arg
func_8004B72C(0x000000FF, 0x000000FF, 0x000000DF, 0x000000FF, 0x0000005F, 0, 0x00000060);
gSPDisplayList(gDisplayListHead++, D_0D008E48);
}
+ FrameInterpolation_RecordCloseChild();
gMatrixEffectCount += 1;
}
}
@@ -5964,7 +5968,7 @@ void render_balloon(Vec3f arg0, f32 arg1, s16 arg2, s16 arg3) {
gMatrixEffectCount += 1;
}
-void func_8006C0C8(Vec3f arg0, f32 arg1, s32 rgb, s16 alpha) {
+UNUSED void func_8006C0C8(Vec3f arg0, f32 arg1, s32 rgb, s16 alpha) {
Vec3f sp4C;
Vec3s sp44;
s16 red;
@@ -6454,15 +6458,15 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) {
}
}
-void func_8006DC54(Player* player, s8 arg1, s8 arg2) {
+void func_8006DC54(Player* player, s8 playerId, s8 screenId) {
s16 i;
s32 bitwiseMask;
- bitwiseMask = SIDE_OF_KART << (arg2 * 4);
+ bitwiseMask = SIDE_OF_KART << (screenId * 4);
if (bitwiseMask == (player->unk_002 & bitwiseMask)) {
for (i = 0; i < 10; i++) {
if (player->particlePool0[i].type == 7) {
- func_800658A0(player, arg1, i, arg2);
+ func_800658A0(player, playerId, i, screenId);
}
}
}
diff --git a/src/engine/Smoke.cpp b/src/engine/Smoke.cpp
index 849c67351..e36252f9a 100644
--- a/src/engine/Smoke.cpp
+++ b/src/engine/Smoke.cpp
@@ -89,7 +89,7 @@ void TrainSmokeDraw(s32 cameraId) {
if ((train->SomeFlags != 0) && (is_particle_on_screen(train->Locomotive.position, camera, 0x4000U) != 0)) {
for (size_t i = 0; i < 128; i++) {
- FrameInterpolation_RecordOpenChild("TrainSmokeParticle", train->SmokeParticles[i]);
+ FrameInterpolation_RecordOpenChild("train_smoke_particle", (train->SmokeParticles[i] << 4) | camera->cameraId);
render_object_train_smoke_particle(train->SmokeParticles[i], cameraId);
FrameInterpolation_RecordCloseChild();
}
@@ -103,7 +103,7 @@ void TrainSmokeDraw(s32 cameraId) {
D_80183E80[2] = 0x8000;
if ((boat->SomeFlags != 0) && (is_particle_on_screen(boat->Position, camera, 0x4000U) != 0)) {
for (size_t i = 0; i < gObjectParticle2_SIZE; i++) {
- FrameInterpolation_RecordOpenChild("BoatSmokeParticle", boat->SmokeParticles[i]);
+ FrameInterpolation_RecordOpenChild("boat_smoke_particle", (boat->SmokeParticles[i] << 4) | camera->cameraId);
render_object_paddle_boat_smoke_particle(boat->SmokeParticles[i], cameraId);
FrameInterpolation_RecordCloseChild();
}
diff --git a/src/engine/actors/BowserStatue.cpp b/src/engine/actors/BowserStatue.cpp
index 59a013d7c..b9c2d56e8 100644
--- a/src/engine/actors/BowserStatue.cpp
+++ b/src/engine/actors/BowserStatue.cpp
@@ -14,6 +14,8 @@ extern "C" {
Vtx gBowserStatueVtx[717];
Gfx gBowserStatueGfx[162];
+size_t ABowserStatue::_count = 0;
+
ABowserStatue::ABowserStatue(const SpawnParams& params) {
Name = "Bowser Statue";
ResourceName = "mk:bowser_statue";
@@ -26,6 +28,8 @@ ABowserStatue::ABowserStatue(const SpawnParams& params) {
Scale = params.Scale.value_or(FVector(1.0f, 1.0f, 1.0f));
mBehaviour = static_cast<ABowserStatue::Behaviour>(params.Behaviour.value_or(0));
+ _idx = _count;
+ _count += 1;
}
void ABowserStatue::Tick() {
@@ -44,7 +48,7 @@ void ABowserStatue::Draw(Camera *camera) {
FVector pos = FVector(Pos[0] + 76, Pos[1], Pos[2] + 1846);
- FrameInterpolation_RecordOpenChild("mk:bowser_statue", TAG_OBJECT(this));
+ FrameInterpolation_RecordOpenChild("mk:bowser_statue", TAG_OBJECT((_idx << 4) | camera->cameraId));
ApplyMatrixTransformations(mtx, pos, *(IRotator*)Rot, Scale);
AddObjectMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetCombineMode(gDisplayListHead++,G_CC_MODULATEIA, G_CC_MODULATEIA);
diff --git a/src/engine/actors/BowserStatue.h b/src/engine/actors/BowserStatue.h
index f8eb72514..59a75e3e7 100644
--- a/src/engine/actors/BowserStatue.h
+++ b/src/engine/actors/BowserStatue.h
@@ -30,4 +30,6 @@ public:
virtual bool IsMod() override;
private:
ABowserStatue::Behaviour mBehaviour;
+ static size_t _count;
+ size_t _idx;
};
diff --git a/src/engine/actors/FallingRock.cpp b/src/engine/actors/FallingRock.cpp
index d32b65c9d..4cd4b72ce 100644
--- a/src/engine/actors/FallingRock.cpp
+++ b/src/engine/actors/FallingRock.cpp
@@ -24,6 +24,7 @@ AFallingRock::AFallingRock(SpawnParams params) : AActor(params) {
Type = ACTOR_FALLING_ROCK;
Name = "Falling Rock";
ResourceName = "mk:falling_rock";
+ _idx = _count;
FVector pos = params.Location.value_or(FVector(0, 0, 0));
TimerLength = params.Behaviour.value_or(80);
@@ -179,7 +180,7 @@ void AFallingRock::Draw(Camera* camera) {
sp98[2] = 0;
sp8C[1] = height + 2.0f;
- FrameInterpolation_RecordOpenChild("rock_shadow", (uintptr_t) this);
+ FrameInterpolation_RecordOpenChild("rock_shadow", (_idx << 4) | camera->cameraId);
mtxf_pos_rotation_xyz(mtx, sp8C, sp98);
if (render_set_position(mtx, 0) == 0) {
FrameInterpolation_RecordCloseChild();
@@ -190,18 +191,15 @@ void AFallingRock::Draw(Camera* camera) {
}
}
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("rock", (uintptr_t) this);
+ FrameInterpolation_RecordOpenChild("rock", (_idx << 4) | camera->cameraId);
mtxf_pos_rotation_xyz(mtx, Pos, Rot);
if (render_set_position(mtx, 0) == 0) {
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
return;
}
gSPDisplayList(gDisplayListHead++, (Gfx*)d_course_choco_mountain_dl_falling_rock);
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
diff --git a/src/engine/actors/FallingRock.h b/src/engine/actors/FallingRock.h
index 2bbbd7443..ec05a8674 100644
--- a/src/engine/actors/FallingRock.h
+++ b/src/engine/actors/FallingRock.h
@@ -37,7 +37,8 @@ public:
virtual void DrawEditorProperties() override;
void Reset();
- private:
+private:
uint32_t RespawnTimer = 0;
static size_t _count;
+ size_t _idx;
};
diff --git a/src/engine/actors/Finishline.cpp b/src/engine/actors/Finishline.cpp
index ec9a5f97b..5b853fbfc 100644
--- a/src/engine/actors/Finishline.cpp
+++ b/src/engine/actors/Finishline.cpp
@@ -24,6 +24,7 @@ size_t AFinishline::_count = 0;
AFinishline::AFinishline(const SpawnParams& params) : AActor(params) {
Name = "Finishline";
ResourceName = "mk:finishline";
+ _idx = _count;
if (params.Location.has_value()) {
FVector pos = params.Location.value_or(FVector(0, 0, 0));
@@ -47,6 +48,8 @@ AFinishline::AFinishline(const SpawnParams& params) : AActor(params) {
Flags = -0x8000 | 0x4000;
BoundingBoxSize = 0.0f;
+
+ _count +=1;
}
void AFinishline::BeginPlay() {
@@ -70,7 +73,7 @@ void AFinishline::Draw(Camera *camera) {
return;
}
- FrameInterpolation_RecordOpenChild("Finishline", _count);
+ FrameInterpolation_RecordOpenChild("finishline", (_idx << 4) | (camera->cameraId));
mtxf_pos_rotation_xyz(mtx, Pos, Rot);
diff --git a/src/engine/actors/Finishline.h b/src/engine/actors/Finishline.h
index eefac2f41..681461c5c 100644
--- a/src/engine/actors/Finishline.h
+++ b/src/engine/actors/Finishline.h
@@ -49,6 +49,7 @@ public:
bool bIsFinishline = false;
static size_t _count;
+ size_t _idx;
bool PickedUp = false;
uint32_t Timer = 0;
diff --git a/src/engine/actors/MarioSign.cpp b/src/engine/actors/MarioSign.cpp
index 7722b7de5..bf87b0f6b 100644
--- a/src/engine/actors/MarioSign.cpp
+++ b/src/engine/actors/MarioSign.cpp
@@ -14,12 +14,15 @@ extern "C" {
#include "collision.h"
}
+size_t AMarioSign::_count = 0;
+
AMarioSign::AMarioSign(const SpawnParams& params) : AActor(params) {
Name = "Mario Sign";
ResourceName = "mk:mario_sign";
Model = d_course_mario_raceway_dl_sign;
Speed = params.Speed.value_or(182);
+ _idx = _count;
FVector pos = params.Location.value_or(FVector(0, 0, 0));
Pos[0] = pos.x * gTrackDirection;
@@ -36,6 +39,8 @@ AMarioSign::AMarioSign(const SpawnParams& params) : AActor(params) {
func_802AAAAC(&Unk30);
Flags = -0x8000;
Flags |= 0x4000;
+
+ _count += 1;
}
bool AMarioSign::IsMod() {
@@ -73,7 +78,7 @@ void AMarioSign::Draw(Camera *camera) {
unk = MAX(unk, 0.0f);
}
if (!(unk < 0.0f)) {
- FrameInterpolation_RecordOpenChild("mk:mario_sign", TAG_OBJECT(this));
+ FrameInterpolation_RecordOpenChild("mk:mario_sign", TAG_OBJECT((_idx << 4) | camera->cameraId));
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
mtxf_pos_rotation_xyz(sp40, Pos, Rot);
diff --git a/src/engine/actors/MarioSign.h b/src/engine/actors/MarioSign.h
index 57b6c38aa..699a68769 100644
--- a/src/engine/actors/MarioSign.h
+++ b/src/engine/actors/MarioSign.h
@@ -13,7 +13,9 @@ extern "C" {
class AMarioSign : public AActor {
public:
- virtual ~AMarioSign() = default;
+ virtual ~AMarioSign() {
+ _count -= 1;
+ };
explicit AMarioSign(const SpawnParams& params);
// This is simply a helper function to keep Spawning code clean
@@ -33,4 +35,7 @@ public:
virtual void SetSpawnParams(SpawnParams& params) override;
virtual void Tick() override;
virtual void Draw(Camera*) override;
+private:
+ static size_t _count;
+ size_t _idx;
};
diff --git a/src/engine/actors/Text.cpp b/src/engine/actors/Text.cpp
index f6ab19373..d2468d2a1 100644
--- a/src/engine/actors/Text.cpp
+++ b/src/engine/actors/Text.cpp
@@ -357,6 +357,7 @@ void AText::SetupVtx() {
void AText::DrawText3D(Camera* camera) { // Based on func_80095BD0
Mat4 mtx;
+ FrameInterpolation_RecordOpenChild("actor_text", (_idx << 4) | camera->cameraId);
if (FaceCamera) {
ApplySphericalBillBoard(mtx, *(FVector*)Pos, Scale, camera->cameraId);
} else {
@@ -365,7 +366,6 @@ void AText::DrawText3D(Camera* camera) { // Based on func_80095BD0
AddObjectMatrix(mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- FrameInterpolation_RecordOpenChild("actor_text", ((uintptr_t)_idx << 6) | camera->cameraId);
gSPDisplayList(gDisplayListHead++, (Gfx*)D_020077A8);
for (CharacterList& tex : TextureList) {
diff --git a/src/engine/actors/WarioSign.cpp b/src/engine/actors/WarioSign.cpp
index cd7813f04..9b3a276ac 100644
--- a/src/engine/actors/WarioSign.cpp
+++ b/src/engine/actors/WarioSign.cpp
@@ -13,6 +13,8 @@ extern "C" {
#include "collision.h"
}
+size_t AWarioSign::_count = 0;
+
AWarioSign::AWarioSign(const SpawnParams& params) : AActor(params) {
Type = ACTOR_WARIO_SIGN;
Name = "Wario Sign";
@@ -20,6 +22,7 @@ AWarioSign::AWarioSign(const SpawnParams& params) : AActor(params) {
Model = d_course_wario_stadium_dl_sign;
Speed = params.Speed.value_or(182);
+ _idx = _count;
FVector pos = params.Location.value_or(FVector(0, 0, 0));
Pos[0] = pos.x * gTrackDirection;
@@ -35,6 +38,8 @@ AWarioSign::AWarioSign(const SpawnParams& params) : AActor(params) {
func_802AAAAC(&Unk30);
Flags = -0x8000;
+
+ _count += 1;
}
bool AWarioSign::IsMod() {
@@ -54,7 +59,7 @@ void AWarioSign::Draw(Camera *camera) {
unk = MAX(unk, 0.0f);
}
if (!(unk < 0.0f)) {
- FrameInterpolation_RecordOpenChild("mk:mario_sign", TAG_OBJECT(this));
+ FrameInterpolation_RecordOpenChild("mk:mario_sign", TAG_OBJECT((_idx << 4) | camera->cameraId));
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
gSPClearGeometryMode(gDisplayListHead++, G_LIGHTING);
diff --git a/src/engine/actors/WarioSign.h b/src/engine/actors/WarioSign.h
index 112222570..355e7343a 100644
--- a/src/engine/actors/WarioSign.h
+++ b/src/engine/actors/WarioSign.h
@@ -8,7 +8,9 @@
class AWarioSign : public AActor {
public:
- virtual ~AWarioSign() = default;
+ virtual ~AWarioSign() {
+ _count -= 1;
+ };
explicit AWarioSign(const SpawnParams& params);
// This is simply a helper function to keep Spawning code clean
@@ -27,4 +29,7 @@ public:
virtual bool IsMod() override;
virtual void Tick() override;
virtual void Draw(Camera*) override;
+private:
+ static size_t _count;
+ size_t _idx;
};
diff --git a/src/engine/objects/Bat.cpp b/src/engine/objects/Bat.cpp
index 2b6f01230..148725bca 100644
--- a/src/engine/objects/Bat.cpp
+++ b/src/engine/objects/Bat.cpp
@@ -126,7 +126,7 @@ void OBat::Draw(s32 cameraId) {
if ((gObjectList[objectIndex].state >= 2) && (gMatrixHudCount < 0x2EF)) {
// @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Bat set 1", (uintptr_t) &gObjectList[objectIndex]);
+ FrameInterpolation_RecordOpenChild("bat_1", (objectIndex << 4) | cameraId);
D_80183E80[1] =
func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], cam->pos);
@@ -149,7 +149,7 @@ void OBat::Draw(s32 cameraId) {
if ((gObjectList[objectIndex].state >= 2) && (gMatrixHudCount < 0x2EF)) {
// @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Bat set 2", (uintptr_t) &gObjectList[objectIndex]);
+ FrameInterpolation_RecordOpenChild("bat_2", (objectIndex << 4) | cameraId);
D_80183E80[1] =
func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], cam->pos);
diff --git a/src/engine/objects/Boos.cpp b/src/engine/objects/Boos.cpp
index f05d62be1..f41197f46 100644
--- a/src/engine/objects/Boos.cpp
+++ b/src/engine/objects/Boos.cpp
@@ -104,30 +104,30 @@ void OBoos::Draw(s32 cameraId) {
temp_s2 = MIN(temp_s2, 0x15F91U);
}
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Boo", (uintptr_t)&gObjectList[objectIndex]);
+ FrameInterpolation_RecordOpenChild("boo", (objectIndex << 4) | cameraId);
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
func_800523B8(objectIndex, cameraId, temp_s2);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
}
-void OBoos::func_800523B8(s32 objectIndex, s32 arg1, u32 arg2) {
+void OBoos::func_800523B8(s32 objectIndex, s32 cameraId, u32 arg2) {
UNUSED s32 pad[2];
Object* object;
- Camera* camera = &camera1[arg1];
+ Camera* camera = &camera1[cameraId];
object = &gObjectList[objectIndex];
object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
func_800484BC(object->pos, object->orientation, object->sizeScaling, object->primAlpha, (u8*) object->activeTLUT,
(u8*) object->activeTexture, object->vertex, 0x00000030, 0x00000028, 0x00000030, 0x00000028);
if ((is_obj_flag_status_active(objectIndex, 0x00000020) != 0) && (arg2 < 0x15F91U)) {
+ FrameInterpolation_RecordOpenChild("boo_hoo", (objectIndex << 4) | cameraId);
func_8004A630(&D_8018C830, object->pos, 0.4f);
+ FrameInterpolation_RecordCloseChild();
}
}
diff --git a/src/engine/objects/Boos.h b/src/engine/objects/Boos.h
index b29757fa7..faaf35ee7 100644
--- a/src/engine/objects/Boos.h
+++ b/src/engine/objects/Boos.h
@@ -63,7 +63,7 @@ public:
virtual void Tick() override;
virtual void Draw(s32 cameraId) override;
virtual void DrawEditorProperties() override;
- void func_800523B8(s32 objectIndex, s32 arg1, u32 arg2);
+ void func_800523B8(s32 objectIndex, s32 cameraId, u32 arg2);
void func_8007CA70(void);
void func_8007C5B4(s32 objectIndex);
diff --git a/src/engine/objects/CheepCheep.cpp b/src/engine/objects/CheepCheep.cpp
index f52af62a1..f81aeb795 100644
--- a/src/engine/objects/CheepCheep.cpp
+++ b/src/engine/objects/CheepCheep.cpp
@@ -1,5 +1,6 @@
#include "CheepCheep.h"
#include "port/Game.h"
+#include "port/interpolation/FrameInterpolation.h"
#include "assets/models/tracks/banshee_boardwalk/banshee_boardwalk_data.h"
#include "assets/models/common_data.h"
@@ -64,6 +65,7 @@ void OCheepCheep::Draw(s32 cameraId) { // func_8005217C
object = &gObjectList[temp_a3];
if (object->state >= 2) {
if (is_obj_flag_status_active(temp_a3, 0x10) != 0) {
+ FrameInterpolation_RecordOpenChild("cheep_cheep", (temp_a3 << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, object->direction_angle, object->sizeScaling);
func_800520C0(temp_a3);
@@ -80,6 +82,7 @@ void OCheepCheep::Draw(s32 cameraId) { // func_8005217C
gSPLight(gDisplayListHead++, &D_800E45C0l[3].l[0], LIGHT_1);
gSPLight(gDisplayListHead++, &D_800E45C0l[3].a, LIGHT_2);
gSPDisplayList(gDisplayListHead++, (Gfx*) d_course_banshee_boardwalk_dl_7650);
+ FrameInterpolation_RecordCloseChild();
}
}
}
diff --git a/src/engine/objects/GrandPrixBalloons.cpp b/src/engine/objects/GrandPrixBalloons.cpp
index 91b41bc5f..ba1c6f003 100644
--- a/src/engine/objects/GrandPrixBalloons.cpp
+++ b/src/engine/objects/GrandPrixBalloons.cpp
@@ -104,7 +104,7 @@ void OGrandPrixBalloons::Draw(s32 cameraId) {
}
}
-void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex, s32 index) {
+void OGrandPrixBalloons::func_80053D74(s32 objectIndex, s32 cameraId, s32 vertexIndex, s32 index) {
Object* object;
Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog);
@@ -113,7 +113,7 @@ void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 ver
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
object = &gObjectList[objectIndex];
- FrameInterpolation_RecordOpenChild("Balloon", TAG_ITEM_ADDR((objectIndex << 7 | index)));
+ FrameInterpolation_RecordOpenChild("balloon", TAG_ITEM_ADDR((objectIndex << 11 | (cameraId << 7) | index)));
D_80183E80[2] = (s16) (object->unk_084[6] + 0x8000);
rsp_set_matrix_transformation(object->pos, (u16*) D_80183E80, object->sizeScaling);
diff --git a/src/engine/objects/GrandPrixBalloons.h b/src/engine/objects/GrandPrixBalloons.h
index 3eb4a1dfa..e6a8045b6 100644
--- a/src/engine/objects/GrandPrixBalloons.h
+++ b/src/engine/objects/GrandPrixBalloons.h
@@ -39,7 +39,7 @@ public:
virtual void Tick() override;
virtual void Draw(s32 cameraId) override;
- void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex, s32 index);
+ void func_80053D74(s32 objectIndex, s32 cameraId, s32 vertexIndex, s32 index);
void func_80074924(s32 objectIndex);
void func_80074D94(s32 objectIndex);
diff --git a/src/engine/objects/Lakitu.cpp b/src/engine/objects/Lakitu.cpp
index 7034e610b..121191a12 100644
--- a/src/engine/objects/Lakitu.cpp
+++ b/src/engine/objects/Lakitu.cpp
@@ -118,8 +118,6 @@ void OLakitu::Draw(s32 cameraId) {
return;
}
- FrameInterpolation_RecordOpenChild("Lakitu", (uintptr_t) this);
-
objectIndex = mLakituId;
camera = &cameras[cameraId];
if (is_obj_flag_status_active(objectIndex, 0x00000010) != 0) {
@@ -130,6 +128,7 @@ void OLakitu::Draw(s32 cameraId) {
if (func_80072354(objectIndex, 2) != 0) {
s32 width = object->textureWidth;
s32 height = object->textureHeight;
+ FrameInterpolation_RecordOpenChild("lakitu", (_idx << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007D78);
s32 heightIndex;
@@ -140,10 +139,12 @@ void OLakitu::Draw(s32 cameraId) {
G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPVertex(gDisplayListHead++, (uintptr_t) object->vertex, 4, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
+ FrameInterpolation_RecordCloseChild();
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
} else {
s32 width = object->textureWidth;
s32 height = object->textureHeight;
+ FrameInterpolation_RecordOpenChild("lakitu2", (_idx << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007E98);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_DITHER);
@@ -156,6 +157,7 @@ void OLakitu::Draw(s32 cameraId) {
rsp_load_texture((u8*) object->activeTexture, width, height);
gSPVertex(gDisplayListHead++, (uintptr_t) object->vertex, 4, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*) common_rectangle_display);
+ FrameInterpolation_RecordCloseChild();
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE);
@@ -170,11 +172,12 @@ void OLakitu::Draw(s32 cameraId) {
var_f2 = -var_f2;
}
if ((var_f0 + var_f2) <= 200.0) {
+ FrameInterpolation_RecordOpenChild("lakitu3", (_idx << 4) | cameraId);
func_8004A630(&D_8018C0B0[cameraId], object->pos, 0.35f);
+ FrameInterpolation_RecordCloseChild();
}
}
}
- FrameInterpolation_RecordCloseChild();
}
void OLakitu::func_80079114(s32 objectIndex, s32 playerId, s32 arg2) {
diff --git a/src/engine/objects/Penguin.cpp b/src/engine/objects/Penguin.cpp
index 27c009489..a645b9633 100644
--- a/src/engine/objects/Penguin.cpp
+++ b/src/engine/objects/Penguin.cpp
@@ -137,7 +137,7 @@ void OPenguin::Draw(s32 cameraId) {
//}
temp_s1 = func_8008A364(objectIndex, cameraId, var_s1, drawDistance);
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
- func_800557B4(objectIndex, (u32) temp_s1, var_s3);
+ func_800557B4(objectIndex, cameraId, (u32) temp_s1, var_s3);
}
}
}
diff --git a/src/engine/objects/Thwomp.cpp b/src/engine/objects/Thwomp.cpp
index 054d8d534..b176dca70 100644
--- a/src/engine/objects/Thwomp.cpp
+++ b/src/engine/objects/Thwomp.cpp
@@ -170,8 +170,6 @@ void OThwomp::Tick60fps() { // func_80081210
if (_idx == 0) {
for (var_s4 = 0; var_s4 < gObjectParticle2_SIZE; var_s4++) {
- FrameInterpolation_RecordOpenChild("Thwomp_smoke", (uintptr_t) (var_s4 << 5));
-
objectIndex = gObjectParticle2[var_s4];
if (objectIndex == DELETED_OBJECT_ID) {
continue;
@@ -184,9 +182,6 @@ void OThwomp::Tick60fps() { // func_80081210
continue;
}
delete_object_wrapper(&gObjectParticle2[var_s4]);
-
- // @port Pop the transform id.
- FrameInterpolation_RecordCloseChild();
}
}
}
@@ -732,9 +727,11 @@ void OThwomp::Draw(s32 cameraId) {
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
if ((object->state > 0) && (Behaviour == States::MOVE_FAR)) {
+ FrameInterpolation_RecordOpenChild("thwomp_particle2", (_idx << 12) | (i << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, object->orientation, object->sizeScaling);
gSPVertex(gDisplayListHead++, (uintptr_t) D_0D005C00, 3, 0);
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D006930);
+ FrameInterpolation_RecordCloseChild();
}
}
}
@@ -753,7 +750,7 @@ void OThwomp::Draw(s32 cameraId) {
if ((object->state >= 2) && (Behaviour == States::MOVE_AND_ROTATE)) {
func_8004B138(0x000000FF, 0x000000FF, 0x000000FF, (s32) object->primAlpha);
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
- FrameInterpolation_RecordOpenChild("thwomp_particle", (i << 16) | (_idx << 6) | cameraId);
+ FrameInterpolation_RecordOpenChild("thwomp_particle", (_idx << 12) | (i << 4) | cameraId);
func_800431B0(object->pos, D_80183E80, object->sizeScaling, (Vtx*) D_0D005AE0);
FrameInterpolation_RecordCloseChild();
}
diff --git a/src/engine/objects/TrashBin.cpp b/src/engine/objects/TrashBin.cpp
index b483a7549..75c5390fa 100644
--- a/src/engine/objects/TrashBin.cpp
+++ b/src/engine/objects/TrashBin.cpp
@@ -64,8 +64,7 @@ void OTrashBin::Draw(s32 cameraId) {
Vec3f Pos = { _pos.x + 63, _pos.y + 12, _pos.z + 25 };
Vec3s Rot = { 0, 0x4000, 0 };
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("OTrashBin", (uintptr_t) object);
+ FrameInterpolation_RecordOpenChild("OTrashBin", (_objectIndex << 4) | cameraId);
mtxf_pos_rotation_xyz(mtx, Pos, Rot);
//mtxf_scale(mtx, 1.0f);
@@ -73,7 +72,6 @@ void OTrashBin::Draw(s32 cameraId) {
gSPDisplayList(gDisplayListHead++, BinMod);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
diff --git a/src/engine/particles/StarEmitter.cpp b/src/engine/particles/StarEmitter.cpp
index fafb7a007..878990f9b 100644
--- a/src/engine/particles/StarEmitter.cpp
+++ b/src/engine/particles/StarEmitter.cpp
@@ -108,13 +108,11 @@ void StarEmitter::Draw(s32 cameraId) { // func_80054BE8
D_80183E80[0] = 0;
for (var_s0 = 0; var_s0 < gObjectParticle3_SIZE; var_s0++) {
temp_a0 = ObjectIndex[var_s0];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Ceremony Stars", (uintptr_t) &ObjectIndex[var_s0]);
if ((temp_a0 != -1) && (gObjectList[temp_a0].state >= 2)) {
+ FrameInterpolation_RecordOpenChild("trophy_stars", (var_s0 << 4) | cameraId);
StarEmitter::func_80054AFC(temp_a0, camera->pos);
+ FrameInterpolation_RecordCloseChild();
}
- // @port Pop the transform id.
- FrameInterpolation_RecordCloseChild();
}
}
diff --git a/src/engine/sky/SkyCloud.cpp b/src/engine/sky/SkyCloud.cpp
index 2cad8b7c6..6c81cfbdd 100644
--- a/src/engine/sky/SkyCloud.cpp
+++ b/src/engine/sky/SkyCloud.cpp
@@ -95,7 +95,7 @@ void SkyCloud::Draw(ScreenContext* screen, s32 arg0) { // render_clouds
return;
}
if (mVisible) {
- FrameInterpolation_RecordOpenChild("render_clouds", TAG_CLOUDS((_idx << 4) | (mScreen - gScreenOneCtx)));
+ FrameInterpolation_RecordOpenChild("render_clouds", TAG_CLOUDS((_idx << 4) | (mScreen - gScreenContexts)));
if (D_8018D228 != mCloudVariant) {
D_8018D228 = mCloudVariant;
diff --git a/src/engine/sky/SkySnow.cpp b/src/engine/sky/SkySnow.cpp
index 7c931befe..97197a4b8 100644
--- a/src/engine/sky/SkySnow.cpp
+++ b/src/engine/sky/SkySnow.cpp
@@ -85,7 +85,7 @@ void SkySnow::Draw(ScreenContext* screen, s32 arg0) { // render_clouds
}
if (mVisible) {
- FrameInterpolation_RecordOpenChild("render_snow", TAG_CLOUDS((_idx << 4) | (screen - gScreenOneCtx)));
+ FrameInterpolation_RecordOpenChild("render_snow", TAG_CLOUDS((_idx << 4) | (screen - gScreenContexts)));
if (D_8018D228 != mCloudVariant) {
D_8018D228 = mCloudVariant;
diff --git a/src/engine/sky/SkyStar.cpp b/src/engine/sky/SkyStar.cpp
index 7f696d7bb..928c20867 100644
--- a/src/engine/sky/SkyStar.cpp
+++ b/src/engine/sky/SkyStar.cpp
@@ -107,7 +107,7 @@ void SkyStar::Draw(ScreenContext* screen, s32 arg0) { // render_stars
s32 posY = arg0 - mY;
func_8004B414(255, 255, 255, 255);
if (mVisible) {
- FrameInterpolation_RecordOpenChild("render_stars", TAG_CLOUDS((_idx << 4) | (screen - gScreenOneCtx)));
+ FrameInterpolation_RecordOpenChild("render_stars", TAG_CLOUDS((_idx << 4) | (screen - gScreenContexts)));
func_80044DA0((u8*)mTexture, mTextureWidth, mTextureHeight);
diff --git a/src/engine/tracks/CustomTrack.cpp b/src/engine/tracks/CustomTrack.cpp
index 9e720c4c9..52f9f9672 100644
--- a/src/engine/tracks/CustomTrack.cpp
+++ b/src/engine/tracks/CustomTrack.cpp
@@ -290,7 +290,7 @@ void CustomTrack::DrawTransparency(ScreenContext* screen, uint16_t pathCounter,
for (TrackSections& item : mTranslucentItems) {
Mat4 matrix;
FVector pos = {item.location[0], item.location[1], item.location[2]};
- FrameInterpolation_RecordOpenChild("translucent_obj", item.crc);
+ FrameInterpolation_RecordOpenChild("translucent_obj", (item.crc << 4) | screen - gScreenContexts);
ApplyMatrixTransformations(matrix, pos, IRotator(0, 0, 0), FVector(1, 1, 1));
AddObjectMatrix(matrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, (Gfx*) ResourceGetDataByCrc(item.crc));
@@ -301,9 +301,11 @@ void CustomTrack::DrawTransparency(ScreenContext* screen, uint16_t pathCounter,
for (TrackSections& item : mTranslucentNoZBufferItems) {
Mat4 matrix;
FVector pos = {item.location[0], item.location[1], item.location[2]};
+ FrameInterpolation_RecordOpenChild("translucent_no_z", (item.crc << 4) | screen - gScreenContexts);
ApplyMatrixTransformations(matrix, pos, IRotator(0, 0, 0), FVector(1, 1, 1));
AddObjectMatrix(matrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gDisplayListHead++, (Gfx*) ResourceGetDataByCrc(item.crc));
+ FrameInterpolation_RecordCloseChild();
}
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER);
}
diff --git a/src/racing/actors.c b/src/racing/actors.c
index 04bb2fe2e..5482a08ec 100644
--- a/src/racing/actors.c
+++ b/src/racing/actors.c
@@ -547,7 +547,7 @@ void render_cows(Camera* camera, Mat4 arg1) {
arg1[3][1] = sp88[1];
arg1[3][2] = sp88[2];
- FrameInterpolation_RecordOpenChild("render_actor_cow", TAG_ITEM_ADDR((i << 5) | (camera - cameras)));
+ FrameInterpolation_RecordOpenChild("render_actor_cow", TAG_ITEM_ADDR((i << 4) | (camera - cameras)));
if ((gMatrixObjectCount < MTX_OBJECT_POOL_SIZE) && (render_set_position(arg1, 0) != 0)) {
switch (var_s1->someId) {
@@ -684,7 +684,7 @@ void render_palm_trees(Camera* camera, Mat4 arg1) {
var_s1++;
continue;
}
- FrameInterpolation_RecordOpenChild("render_palm_tree", TAG_ITEM_ADDR((i << 5) | (camera - cameras)));
+ FrameInterpolation_RecordOpenChild("render_palm_tree", TAG_ITEM_ADDR((i << 4) | (camera - cameras)));
test &= 0xF;
test = (s16) test;
@@ -737,7 +737,13 @@ void render_actor_shell(Camera* camera, Mat4 matrix, struct ShellActor* shell) {
char* phi_t3;
bool reverseShell = false;
- FrameInterpolation_RecordOpenChild("shell", TAG_ITEM_ADDR(((( (struct Actor*)shell ) - gActorList) << 5) | (camera - cameras)));
+ size_t actorIdx = CM_FindActorIndex((struct Actor*)shell);
+ if (-1 == actorIdx) {
+ printf("[render_actor_shell] Could not find actor index for FI, skipping!\n");
+ return;
+ }
+
+ FrameInterpolation_RecordOpenChild("shell", TAG_ITEM_ADDR(((actorIdx << 4) | (camera - cameras))));
f32 temp_f0 =
is_within_render_distance(camera->pos, shell->pos, camera->rot[1], 0, camera->fieldOfView, 490000.0f);
diff --git a/src/racing/skybox_and_splitscreen.c b/src/racing/skybox_and_splitscreen.c
index fba19a45b..825150f83 100644
--- a/src/racing/skybox_and_splitscreen.c
+++ b/src/racing/skybox_and_splitscreen.c
@@ -664,7 +664,7 @@ void render_screens(ScreenContext* screen, s32 mode, s32 someId, s32 playerId) {
CM_SetViewProjection(camera);
// Create a matrix for the track and game objects
- FrameInterpolation_RecordOpenChild("track", TAG_TRACK((camera->cameraId | (playerId << 2))));
+ FrameInterpolation_RecordOpenChild("track", TAG_TRACK(((playerId << 4) | camera->cameraId)));
Mat4 trackMatrix;
mtxf_identity(trackMatrix);
if (gIsMirrorMode != 0) {
diff --git a/src/render_objects.c b/src/render_objects.c
index 01f380bfa..2a0961a03 100644
--- a/src/render_objects.c
+++ b/src/render_objects.c
@@ -2635,7 +2635,6 @@ void draw_simplified_lap_count(s32 playerId) {
}
void func_8004E800(s32 playerId) {
- // @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Player place HUD", playerId);
if (playerHUD[playerId].unk_81 != 0) {
if (playerHUD[playerId].lapCount != 3) {
@@ -2652,7 +2651,6 @@ void func_8004E800(s32 playerId) {
0x00000040, 0x00000080, 0x00000040);
}
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
@@ -3099,8 +3097,7 @@ void func_80050320(void) {
var_a0 = 1;
}
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("ranking portraits", i | var_a0 << 16);
+ FrameInterpolation_RecordOpenChild("ranking_portraits", (var_a0 << 4) | i);
temp_v0 = gGPCurrentRacePlayerIdByRank[i];
characterId = gGPCurrentRaceCharacterIdByRank[i];
@@ -3111,7 +3108,6 @@ void func_80050320(void) {
func_8004FDB4(D_8018D028[i], D_8018D050[i], i, lapCount, characterId, D_8018D3E0, 0, var_a0, 0);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
@@ -3123,8 +3119,7 @@ void func_80050320(void) {
var_a0 = 1;
}
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("ranking portraits 2", i | var_a0 << 16);
+ FrameInterpolation_RecordOpenChild("ranking_portraits2", (var_a0 << 4) | i);
temp_v0 = gGPCurrentRacePlayerIdByRank[i];
// ????
@@ -3136,7 +3131,6 @@ void func_80050320(void) {
func_8004FDB4(D_8018D028[i], D_8018D050[i], i, lapCount, characterId, 0x000000FF, 0, var_a0, 1);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
@@ -3435,8 +3429,7 @@ void render_object_leaf_particle(UNUSED s32 cameraId) {
for (i = 0; i < gLeafParticle_SIZE; i++) {
leafIndex = gLeafParticle[i];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Leaves", leafIndex);
+ FrameInterpolation_RecordOpenChild("leaves", (leafIndex << 4) | cameraId);
if (leafIndex != -1) {
object = &gObjectList[leafIndex];
@@ -3446,14 +3439,13 @@ void render_object_leaf_particle(UNUSED s32 cameraId) {
}
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
gSPSetGeometryMode(gDisplayListHead++, G_CULL_BACK);
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
}
-void render_object_snowflakes_particles(void) {
+void render_object_snowflakes_particles(s32 cameraId) {
size_t i;
s32 snowflakeIndex;
@@ -3463,15 +3455,13 @@ void render_object_snowflakes_particles(void) {
for (i = 0; i < NUM_SNOWFLAKES; i++) {
snowflakeIndex = gObjectParticle1[i];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("SnowFlakes", snowflakeIndex);
+ FrameInterpolation_RecordOpenChild("snowFlakes", (snowflakeIndex << 4) | cameraId);
if (gObjectList[snowflakeIndex].state >= 2) {
rsp_set_matrix_gObjectList(snowflakeIndex);
gSPDisplayList(gDisplayListHead++, D_0D006980);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
@@ -3578,20 +3568,22 @@ void func_800520C0(s32 arg0) {
}
}
-void func_8005285C(s32 arg0) {
+void func_8005285C(s32 cameraId, s32 playerId) {
Player* temp_v0;
- temp_v0 = &gPlayerOne[arg0];
+ temp_v0 = &gPlayerOne[playerId];
D_80183E40[0] = temp_v0->pos[0];
D_80183E40[1] = temp_v0->pos[1];
D_80183E40[2] = temp_v0->pos[2];
D_80183E80[0] = 0;
D_80183E80[1] = 0;
D_80183E80[2] = 0;
+ FrameInterpolation_RecordOpenChild("ice_block", (playerId << 4) | cameraId);
func_80043500(D_80183E40, D_80183E80, 0.02f, d_course_sherbet_land_dl_ice_block);
+ FrameInterpolation_RecordCloseChild();
}
-void func_800528EC(s32 playerId) {
+void func_800528EC(s32 cameraId) {
s32 var_s3;
s32 objectIndex;
Object* object;
@@ -3614,9 +3606,11 @@ void func_800528EC(s32 playerId) {
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
if (object->state > 0) {
+ FrameInterpolation_RecordOpenChild("ice_block2", (var_s3 << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, D_80183E80, object->sizeScaling);
gSPVertex(gDisplayListHead++, D_0D005BD0, 3, 0);
gSPDisplayList(gDisplayListHead++, D_0D006930);
+ FrameInterpolation_RecordCloseChild();
}
}
}
@@ -3625,11 +3619,13 @@ void func_800528EC(s32 playerId) {
objectIndex = gObjectParticle2[var_s3];
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
- if ((object->state > 0) && (playerId == object->unk_084[7]) &&
+ if ((object->state > 0) && (cameraId == object->unk_084[7]) &&
(gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX)) {
+ FrameInterpolation_RecordOpenChild("ice_block3", (var_s3 << 4) | cameraId);
rsp_set_matrix_transformation(object->pos, D_80183E80, object->sizeScaling);
gSPVertex(gDisplayListHead++, D_0D005BD0, 3, 0);
gSPDisplayList(gDisplayListHead++, D_0D006930);
+ FrameInterpolation_RecordCloseChild();
}
}
}
@@ -3639,7 +3635,7 @@ void func_800528EC(s32 playerId) {
gSPTexture(gDisplayListHead++, 0x0001, 0x0001, 0, G_TX_RENDERTILE, G_OFF);
}
-void render_ice_block(s32 playerId) {
+void render_ice_block(s32 cameraId) {
s32 objectIndex;
// Lights1 D_800E4620l = *(Lights1 *) LOAD_ASSET(D_800E4620);
D_800E4620.l[0].l.dir[0] = D_80165840[0];
@@ -3651,14 +3647,14 @@ void render_ice_block(s32 playerId) {
objectIndex = gIndexLakituList[i];
if (objectIndex) {}
if (func_80072320(objectIndex, 4) != false) {
- func_8005285C(i);
+ func_8005285C(cameraId, i);
}
func_80072320(objectIndex, 0x00000010);
}
- func_800528EC(playerId);
+ func_800528EC(cameraId);
}
-void func_80052D70(s32 playerId) {
+void func_80052D70(s32 cameraId, s32 playerId) {
s32 test;
Player* temp_v1;
@@ -3668,11 +3664,13 @@ void func_80052D70(s32 playerId) {
D_80183E40[0] = temp_v1->pos[0];
D_80183E40[1] = temp_v1->unk_074 - 6.5;
D_80183E40[2] = temp_v1->pos[2];
+ FrameInterpolation_RecordOpenChild("some_snow_thing", (playerId << 4) | cameraId);
func_800435A0(D_80183E40, (u16*) D_80183E80, 0.02f, d_course_sherbet_land_dl_ice_block, 0x000000FF);
+ FrameInterpolation_RecordCloseChild();
}
}
-void func_80052E30(UNUSED s32 arg0) {
+void func_80052E30(s32 cameraId) {
s32 var_s0;
D_800E4620.l[0].l.dir[0] = D_80165840[0];
D_800E4620.l[0].l.dir[1] = D_80165840[1];
@@ -3684,7 +3682,7 @@ void func_80052E30(UNUSED s32 arg0) {
D_80183E80[2] = 0;
if (gPlayerCount == 1) {
for (var_s0 = 0; var_s0 < gPlayerCountSelection1; var_s0++) {
- func_80052D70(var_s0);
+ func_80052D70(cameraId, var_s0);
}
}
}
@@ -3800,8 +3798,7 @@ void render_object_bowser_flame_particle(s32 objectIndex, s32 cameraId) {
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
object = &gObjectList[objectIndex];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Bowser Statue Flame", TAG_ITEM_ADDR(object));
+ FrameInterpolation_RecordOpenChild("bowser_statue_flame", TAG_ITEM_ADDR((objectIndex << 4) | cameraId));
if (object->unk_0D5 == 9) {
func_8004B72C(0xFF, (s32) object->type, 0, (s32) object->unk_0A2, 0, 0, (s32) object->primAlpha);
} else {
@@ -3810,7 +3807,6 @@ void render_object_bowser_flame_particle(s32 objectIndex, s32 cameraId) {
D_80183E80[1] = func_800418AC(object->pos[0], object->pos[2], camera->pos);
func_800431B0(object->pos, D_80183E80, object->sizeScaling, D_0D005AE0);
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
@@ -3873,8 +3869,8 @@ void render_object_smoke_particles(s32 cameraId) {
objectIndex = gObjectParticle4[i];
if (objectIndex != NULL_OBJECT_ID) {
object = &gObjectList[objectIndex];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("SmokeParticles", (uintptr_t) object);
+
+ FrameInterpolation_RecordOpenChild("smokes_particles", (uintptr_t) (objectIndex << 4) | cameraId);
if (object->state >= 2) {
if (object->unk_0D8 == 3) {
func_8008A364(objectIndex, cameraId, 0x4000U, 0x00000514);
@@ -3885,7 +3881,6 @@ void render_object_smoke_particles(s32 cameraId) {
func_8005477C(objectIndex, object->unk_0D8, sp54->pos);
}
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
}
@@ -3894,14 +3889,13 @@ void render_object_smoke_particles(s32 cameraId) {
UNUSED void func_800557AC() {
}
-void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
+void func_800557B4(s32 objectIndex, s32 cameraId, u32 arg1, u32 arg2) {
Vec3f sp34;
Object* object;
object = &gObjectList[objectIndex];
- // @port: Tag the transform.
- FrameInterpolation_RecordOpenChild("Penguin", (uintptr_t) object);
+ FrameInterpolation_RecordOpenChild("penguin", (objectIndex << 4) | cameraId);
if (object->state >= 2) {
if (is_obj_flag_status_active(objectIndex, 0x00000020) != 0) {
if (func_80072320(objectIndex, 4) != 0) {
@@ -3925,7 +3919,6 @@ void func_800557B4(s32 objectIndex, u32 arg1, u32 arg2) {
(s16) object->textureListIndex);
}
- // @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
}
@@ -3956,7 +3949,7 @@ void render_object_neon(s32 cameraId) {
objectIndex = indexObjectList1[i];
if (D_8018E838[cameraId] == 0) {
object = &gObjectList[objectIndex];
- FrameInterpolation_RecordOpenChild(object, TAG_OBJECT((objectIndex << 8) + i));
+ FrameInterpolation_RecordOpenChild("neon_sign", TAG_OBJECT((objectIndex << 8) | (cameraId << 4) | i));
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);
diff --git a/src/render_objects.h b/src/render_objects.h
index ce385d2e5..78db7ef4d 100644
--- a/src/render_objects.h
+++ b/src/render_objects.h
@@ -317,7 +317,7 @@ void func_80050E34(s32, s32);
void func_800514BC(void);
void render_object_leaf_particle(s32);
-void render_object_snowflakes_particles(void);
+void render_object_snowflakes_particles(s32 cameraId);
void func_80051ABC(ScreenContext* screen, s16, s32);
void func_80051C60(ScreenContext* screen, s16, s32);
void func_80051EBC(ScreenContext* screen);
@@ -327,10 +327,10 @@ void func_80052044(ScreenContext* screen);
void func_80052080(ScreenContext* screen);
void func_800520C0(s32);
-void func_8005285C(s32);
+void func_8005285C(s32, s32);
void func_800528EC(s32);
void render_ice_block(s32);
-void func_80052D70(s32);
+void func_80052D70(s32, s32);
void func_80052E30(s32);
void render_object_snowmans_list_2(s32);
@@ -359,7 +359,7 @@ void func_80055228(s32);
void render_object_seagulls(s32);
void render_object_crabs(s32);
void func_800557AC(void);
-void func_800557B4(s32, u32, u32);
+void func_800557B4(s32, s32, u32, u32);
void func_80055AB8(s32, s32);
void render_object_chain_chomps(s32);
void func_80055EF4(s32, s32);