diff options
Diffstat (limited to 'src/engine')
27 files changed, 77 insertions, 47 deletions
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); } |
