Maybe fix some interpolation (#637)

* Update render_player.c

* Refactor FrameInterpolation_RecordOpenChild calls

* Update GrandPrixBalloons.cpp

* Modify func_80053D74 to include an additional parameter
This commit is contained in:
MegaMech
2026-02-04 17:18:33 -07:00
committed by GitHub
parent a59dcc1e75
commit ddd47126ec
4 changed files with 14 additions and 17 deletions
+5 -6
View File
@@ -5785,8 +5785,7 @@ void render_battle_balloon(Player* player, s8 arg1, s16 arg2, s8 arg3) {
sp12C[2] = D_8018D7D0[arg1][arg2] - (D_8018D860[arg1][arg2] * coss(temp_t1)) -
((D_8018D890[arg1][arg2] * 8) * sins(temp_t1));
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild((uintptr_t) player, arg1 | arg2 << 16);
FrameInterpolation_RecordOpenChild("battle_balloon", (arg1 << 8) | (arg3 << 4) | arg2);
mtxf_translate_rotate(mtx, sp134, sp12C);
mtxf_scale(mtx, var_f20);
@@ -6303,7 +6302,7 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) {
if ((player->unk_002 & (SIDE_OF_KART << (screenId * 4))) == (SIDE_OF_KART << (screenId * 4))) {
for (var_s2 = 0; var_s2 < 10; var_s2++) {
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("SmokeDust", TAG_SMOKE_DUST((playerId << 8) + var_s2));
FrameInterpolation_RecordOpenChild("smoke_dust", TAG_SMOKE_DUST((playerId << 8) | (screenId << 4) | var_s2));
switch (player->particlePool0[var_s2].type) {
case 1:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
@@ -6325,7 +6324,7 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) {
break;
}
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("SmokeDust", TAG_SMOKE_DUST((playerId << 8) + var_s2 + 30));
FrameInterpolation_RecordOpenChild("smoke_dust2", TAG_SMOKE_DUST((playerId << 8) | (screenId << 4) | var_s2));
switch (player->particlePool3[var_s2].type) {
case 1:
case 9:
@@ -6388,7 +6387,7 @@ void func_8006D474(Player* player, s8 playerId, s8 screenId) {
break;
}
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("SmokeDust", TAG_SMOKE_DUST((playerId << 8) + var_s2 + 10));
FrameInterpolation_RecordOpenChild("smoke_dust3", TAG_SMOKE_DUST((playerId << 8) | (screenId << 4) | var_s2));
switch (player->particlePool1[var_s2].type) {
case DRIFT_PARTICLE:
if (gActiveScreenMode == SCREEN_MODE_3P_4P_SPLITSCREEN) {
@@ -6475,7 +6474,7 @@ void func_8006DD3C(Player* player, s8 playerId, s8 arg2) {
}
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && (arg2 == playerId)) {
FrameInterpolation_RecordOpenChild("onomatopoeia", TAG_SMOKE_DUST((playerId << 8) + 20));
FrameInterpolation_RecordOpenChild("onomatopoeia", TAG_SMOKE_DUST((playerId << 8) | (arg2 << 4)));
switch (player->particlePool2[0].type) {
case 2:
render_player_onomatopoeia_crash(player, playerId, player->particlePool2[0].scale, arg2, 0);
+4 -6
View File
@@ -92,19 +92,19 @@ void OGrandPrixBalloons::Draw(s32 cameraId) {
for (var_s1 = 0; var_s1 < _numBalloons; var_s1++) {
objectIndex = gObjectParticle3[var_s1];
if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) {
OGrandPrixBalloons::func_80053D74(objectIndex, cameraId, 0);
OGrandPrixBalloons::func_80053D74(objectIndex, cameraId, 0, var_s1);
}
}
rsp_load_texture((uint8_t*) gTextureBalloon2, 64, 32);
for (var_s1 = 0; var_s1 < _numBalloons; var_s1++) {
objectIndex = gObjectParticle3[var_s1];
if ((objectIndex != NULL_OBJECT_ID) && (gObjectList[objectIndex].state >= 2)) {
OGrandPrixBalloons::func_80053D74(objectIndex, cameraId, 4);
OGrandPrixBalloons::func_80053D74(objectIndex, cameraId, 4, var_s1);
}
}
}
void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex) {
void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex, s32 index) {
Object* object;
Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog);
@@ -113,9 +113,7 @@ void OGrandPrixBalloons::func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 ver
if (gMatrixHudCount <= MTX_HUD_POOL_SIZE_MAX) {
object = &gObjectList[objectIndex];
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Balloon",
TAG_ITEM_ADDR((objectIndex << 32) + i++)); // Not working properly just yet
FrameInterpolation_RecordOpenChild("Balloon", TAG_ITEM_ADDR((objectIndex << 7 | index)));
D_80183E80[2] = (s16) (object->unk_084[6] + 0x8000);
rsp_set_matrix_transformation(object->pos, (u16*) D_80183E80, object->sizeScaling);
+1 -1
View File
@@ -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);
void func_80053D74(s32 objectIndex, UNUSED s32 arg1, s32 vertexIndex, s32 index);
void func_80074924(s32 objectIndex);
void func_80074D94(s32 objectIndex);
+4 -4
View File
@@ -1183,7 +1183,7 @@ void render_player_shadow(Player* player, s8 playerId, s8 screenId) {
f32 var_f2;
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Kart Shadow", TAG_ITEM_ADDR(player));
FrameInterpolation_RecordOpenChild("kart_shadow", TAG_ITEM_ADDR((playerId << 8) | (screenId << 4)));
temp_t9 = (u16) (player->unk_048[screenId] + player->rotation[1] + player->unk_0C0) / 128; // << 7) & 0xFFFF;
spC0 = -player->rotation[1] - player->unk_0C0;
@@ -1309,7 +1309,7 @@ void render_kart(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
s16 temp_v1;
s16 thing;
FrameInterpolation_RecordOpenChild("player_kart", playerId | screenId << 8);
FrameInterpolation_RecordOpenChild("player_kart", (playerId << 4) | screenId);
if (player->kartProps & UNUSED_0x2000) {
sp14C[0] = 0;
sp14C[1] = player->unk_048[screenId];
@@ -1505,7 +1505,7 @@ void func_80025DE8(Player* player, s8 playerId, s8 screenId, s8 flipOffset) {
sp94[1] = player->unk_048[screenId];
sp94[2] = player->unk_050[screenId];
FrameInterpolation_RecordOpenChild("player_boost", playerId | screenId << 8);
FrameInterpolation_RecordOpenChild("player_boost", (playerId << 4) | screenId);
mtxf_translate_rotate(mtx, sp9C, sp94);
mtxf_scale(mtx, gCharacterSize[player->characterId] * player->size);
@@ -1554,7 +1554,7 @@ void render_player_ice_reflection(Player* player, s8 playerId, s8 screenId, s8 f
}
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("PlayerReflection", playerId | screenId << 8);
FrameInterpolation_RecordOpenChild("player_reflection", (playerId << 4) | screenId);
mtxf_translate_rotate(mtx, sp9C, sp94);
mtxf_scale(mtx, gCharacterSize[player->characterId] * player->size);