Refactor Interpolation System

This commit is contained in:
Sonic Dreamcaster
2026-03-12 19:44:03 -03:00
parent 00cde39873
commit 47831f54ae
9 changed files with 225 additions and 186 deletions
+1 -1
View File
@@ -505,7 +505,7 @@ void Ending_Main(void);
void Ending_Draw(void);
// sf_i5_5
bool Ground_801B49D0(Actor* actor);
bool Ground_List_Setup(Actor* actor);
// libultra
void gSPSegmentLoadRes(void* value, int segNum, uintptr_t target);
+7 -3
View File
@@ -1067,6 +1067,8 @@ void PlayerShot_DrawHitmark(PlayerShot* shot) {
return;
}
} else {
FrameInterpolation_RecordOpenChild(shot, 1);
shot->obj.rot.y = -gPlayer[gPlayerNum].camYaw;
Matrix_RotateY(gGfxMatrix, shot->obj.rot.y, MTXF_APPLY);
Matrix_Scale(gGfxMatrix, 2.0f, 2.0f, 2.0f, MTXF_APPLY);
@@ -1088,6 +1090,8 @@ void PlayerShot_DrawHitmark(PlayerShot* shot) {
gSPDisplayList(gMasterDisp++, D_1025800);
break;
}
FrameInterpolation_RecordCloseChild();
}
}
@@ -1249,6 +1253,8 @@ void PlayerShot_DrawShot(PlayerShot* shot) {
Object_Kill(&shot->obj, shot->sfxSource);
}
} else {
FrameInterpolation_RecordOpenChild(shot, 0);
if ((shot->obj.id == PLAYERSHOT_TANK) || (shot->obj.id == PLAYERSHOT_ON_FOOT) ||
(shot->obj.id == PLAYERSHOT_7)) {
shot->obj.rot.y = RAD_TO_DEG(-gPlayer[gPlayerNum].camYaw);
@@ -1512,12 +1518,11 @@ void PlayerShot_DrawShot(PlayerShot* shot) {
gSPDisplayList(gMasterDisp++, D_GREAT_FOX_E00DFB0);
break;
}
FrameInterpolation_RecordCloseChild();
}
}
void PlayerShot_Draw(PlayerShot* shot) {
FrameInterpolation_RecordOpenChild(shot, 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
switch (shot->obj.status) {
case SHOT_ACTIVE:
PlayerShot_DrawShot(shot);
@@ -1526,7 +1531,6 @@ void PlayerShot_Draw(PlayerShot* shot) {
PlayerShot_DrawHitmark(shot);
break;
}
FrameInterpolation_RecordCloseChild();
}
void PlayerShot_UpdateHitmark(PlayerShot* shot) {
+13 -12
View File
@@ -308,7 +308,6 @@ void Background_DrawStarfield(void) {
FrameInterpolation_ShouldInterpolateFrame(false);
} else {
FrameInterpolation_RecordOpenChild("Starfield", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
}
// Translate to (vx, vy) in ortho coordinates
@@ -442,9 +441,8 @@ void Background_DrawPartialStarfield(s32 yMin, s32 yMax) { // Stars that are in
// Check if the star is within the visible screen area
if ((vx >= 0) && (vx < currentScreenWidth) && (yMin < vy) && (vy < yMax)) {
// Tag the transform. Assuming TAG_STARFIELD is a defined base tag value
FrameInterpolation_RecordOpenChild("SmallStarfield", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
FrameInterpolation_RecordOpenChild("PartialStarfield", i);
// Translate to (vx, vy) in ortho coordinates
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, vx - (currentScreenWidth / 2.0f), -(vy - (currentScreenHeight / 2.0f)), 0.0f,
@@ -551,7 +549,6 @@ void Background_DrawBackdrop(void) {
} else {
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Backdrop", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
}
switch (gCurrentLevel) {
@@ -627,7 +624,6 @@ void Background_DrawBackdrop(void) {
} else {
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Backdrop", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
}
switch ((s32) gCurrentLevel) {
@@ -669,7 +665,6 @@ void Background_DrawBackdrop(void) {
} else {
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Backdrop", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
}
if ((gDrawBackdrop == 2) || (gDrawBackdrop == 7)) {
@@ -771,7 +766,6 @@ void Background_DrawBackdrop(void) {
// Render the textures across the screen (left to right)
for (int i = 0; i < 5; i++) {
FrameInterpolation_RecordOpenChild("Backdrop", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if (gPlayer[0].state == PLAYERSTATE_LEVEL_INTRO) {
gSPDisplayList(gMasterDisp++, D_AQ_601AFF0);
} else {
@@ -839,7 +833,6 @@ void Background_DrawBackdrop(void) {
} else {
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Backdrop", i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
}
if (gCurrentLevel == LEVEL_TITANIA) {
@@ -1139,12 +1132,16 @@ void Background_DrawSun(void) {
sunScale = sKaSunScales;
}
for (i = 0; i < 5; i++, sunColor++, sunAlpha++, sunDL++, sunScale++) {
FrameInterpolation_RecordOpenChild("Sun", i);
Matrix_Push(&gGfxMatrix);
Matrix_Scale(gGfxMatrix, *sunScale, *sunScale, *sunScale, MTXF_APPLY);
Matrix_SetGfxMtx(&gMasterDisp);
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, sunColor->r, sunColor->g, sunColor->b, *sunAlpha);
gSPDisplayList(gMasterDisp++, *sunDL);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
Matrix_Pop(&gGfxMatrix);
}
@@ -1265,7 +1262,7 @@ void AllRangeGround_Draw(void) {
// LOWER RIGHT QUADRANT
if (gPlayer[0].pos.x > maxDistX && gPlayer[0].pos.z > maxDistZ) {
// lower right corner piece : 4
// // lower middle left piece : 5
// lower middle left piece : 5
// lower middle right piece : 6
// side upper right piece: 14
// side lower right piece : 15
@@ -1274,11 +1271,11 @@ void AllRangeGround_Draw(void) {
}
}
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("360Ground", i);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, sGroundPositions360x_FIX[i], 0.0f, sGroundPositions360z_FIX[i], MTXF_APPLY);
if (gCurrentLevel == LEVEL_TRAINING) {
@@ -1394,6 +1391,8 @@ void Background_DrawGround(void) {
#endif
}
FrameInterpolation_RecordOpenChild("Ground", 0);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, gPlayer[gPlayerNum].xPath, -3.0f + gCameraShakeY, sp1D4, MTXF_APPLY);
@@ -2255,6 +2254,8 @@ void Background_DrawGround(void) {
break;
}
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
// Unused. Early water implementation in Aquas?
+60 -49
View File
@@ -271,11 +271,11 @@ void Display_OnFootFalco_PostLimbDraw(s32 limbIndex, Vec3f* rot, void* data) {
}
void Display_OnFootMuzzleFlash(Player* player) {
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_OnFootMuzzleFlash", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Copy(gGfxMatrix, &gIdentityMatrix);
if ((player->state == PLAYERSTATE_ACTIVE) && (player->csTimer != 0)) {
Matrix_Translate(gGfxMatrix, D_display_801613B0[player->num].x, D_display_801613B0[player->num].y,
@@ -325,6 +325,8 @@ void Display_Landmaster(Player* player) {
Vec3f sp4C = { 0.0f, 0.0f, 90.0f };
Vec3f sp40 = { 0.0f, 40.0f, -70.0f };
FrameInterpolation_RecordOpenChild("Landmaster", player->num);
Matrix_Push(&gGfxMatrix);
if (!gVersusMode) {
@@ -364,6 +366,8 @@ void Display_Landmaster(Player* player) {
Matrix_MultVec3f(gGfxMatrix, &sp4C, &D_display_80161548[player->num]);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
Gfx* sFaceDL[] = { aAwFoxHeadDL, aAwFalcoHeadDL, aAwSlippyHeadDL, aAwPeppyHeadDL };
@@ -375,11 +379,11 @@ f32 sReticleScales[] = { 0.0f, 0.0f, 0.0f, 0.0f };
f32 sPlayerShadowing = 0.0f;
void Display_LandmasterMuzzleFlash(Player* player) {
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_LandmasterMuzzleFlash", player->num);
Matrix_Push(&gGfxMatrix);
if ((player->state == PLAYERSTATE_ACTIVE) && (player->unk_1A0 != 0)) {
Matrix_Translate(gGfxMatrix, D_display_80161548[player->num].x, D_display_80161548[player->num].y,
D_display_80161548[player->num].z, MTXF_APPLY);
@@ -431,11 +435,11 @@ void Display_LandmasterThrusters(Player* player) {
sp2C *= 1.1f;
}
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_LandmasterThrusters_1", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, 20.0f, 30.0f, -10.0f, MTXF_APPLY);
if (!gVersusMode) {
@@ -468,11 +472,11 @@ void Display_LandmasterThrusters(Player* player) {
sp2C *= 1.1f;
}
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_LandmasterThrusters_2", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, -20.0f, 30.0f, -10.0f, MTXF_APPLY);
if (!gVersusMode) {
@@ -697,10 +701,11 @@ void Display_ArwingWings(ArwingInfo* arwing) {
}
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
Matrix_Pop(&gGfxMatrix);
// @port Pop the transform id.
FrameInterpolation_RecordCloseChild();
Matrix_Pop(&gGfxMatrix);
}
void Display_Unused(f32 arg0, f32 arg1, UNK_TYPE arg2, UNK_TYPE arg3) {
@@ -708,11 +713,11 @@ void Display_Unused(f32 arg0, f32 arg1, UNK_TYPE arg2, UNK_TYPE arg3) {
}
void Display_CockpitGlass(void) {
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_CockpitGlass", 0);
Matrix_Push(&gGfxMatrix);
Matrix_Copy(gGfxMatrix, &D_display_80161418[0]);
Matrix_Translate(gGfxMatrix, 0.0f, D_display_800CA290, D_display_800CA294, MTXF_APPLY);
Matrix_Scale(gGfxMatrix, D_display_800CA28C, D_display_800CA28C, D_display_800CA28C, MTXF_APPLY);
@@ -793,10 +798,10 @@ void Display_Reticle(Player* player) {
(((gGameState == GSTATE_PLAY) && (player->state == PLAYERSTATE_ACTIVE)) || (gGameState == GSTATE_MENU))) {
for (i = 0; i < 2; i++) {
FrameInterpolation_RecordOpenChild("Reticle", (player->num << 16) + i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
translate = &D_display_801613E0[i];
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, translate->x, translate->y, translate->z, MTXF_APPLY);
if (gChargeTimers[player->num] >= 20) {
RCP_SetupDL(&gMasterDisp, SETUPDL_63_OPTIONAL);
if (i == 1) {
@@ -815,6 +820,7 @@ void Display_Reticle(Player* player) {
Matrix_Scale(gGfxMatrix, sReticleScales[player->num], sReticleScales[player->num], 1.0f, MTXF_APPLY);
Math_SmoothStepToF(&sReticleScales[player->num], 1.0f, 1.0f, 0.2f, 0.0f);
}
Matrix_Scale(gGfxMatrix, 4.0f, 4.0f, 4.0f, MTXF_APPLY);
Matrix_SetGfxMtx(&gMasterDisp);
gSPDisplayList(gMasterDisp++, D_1024F60);
@@ -856,6 +862,8 @@ void Display_PlayerShadow_Draw(Player* player) {
player->shadowing = 180;
}
FrameInterpolation_RecordOpenChild("PlayerShadow", player->num);
switch (player->form) {
case FORM_ARWING:
fake_label:
@@ -895,6 +903,8 @@ void Display_PlayerShadow_Draw(Player* player) {
Matrix_Pop(&gGfxMatrix);
break;
}
FrameInterpolation_RecordCloseChild();
}
void Display_DrawEngineGlow(EngineGlowColor color) {
@@ -921,6 +931,9 @@ void Display_DrawEngineGlow(EngineGlowColor color) {
void Display_LandmasterEngineGlow_Draw(Player* player) {
RCP_SetupDL_64();
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 100);
FrameInterpolation_RecordOpenChild("LandmasterEngineGlow", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_RotateZ(gGfxMatrix, player->bankAngle * M_DTOR, MTXF_APPLY);
if (player->form == FORM_LANDMASTER) {
@@ -941,6 +954,8 @@ void Display_LandmasterEngineGlow_Draw(Player* player) {
Matrix_SetGfxMtx(&gMasterDisp);
Display_DrawEngineGlow(gLevelType);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
void Display_BarrelRollShield(Player* player) {
@@ -970,10 +985,10 @@ void Display_BarrelRollShield(Player* player) {
zRotDirection = -1.0f;
}
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("BarrelRollShield", 0);
FrameInterpolation_RecordOpenChild("BarrelRollShield", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, player->pos.x + dest.x, player->pos.y + dest.y,
player->trueZpos + player->zPath + dest.z, MTXF_APPLY);
@@ -1005,10 +1020,10 @@ void Display_BarrelRollShield(Player* player) {
void Display_UnusedShield(Player* player) {
if (gShieldAlpha[player->num] > 1.0f) {
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("Display_UnusedShield", 0);
FrameInterpolation_RecordOpenChild("Display_UnusedShield", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Copy(gGfxMatrix, &D_display_80161418[player->num]);
Matrix_Translate(gGfxMatrix, 0.0f, -5.0f, 10.0f, MTXF_APPLY);
@@ -1046,12 +1061,16 @@ void Display_ArwingLaserCharge(Player* player) {
Matrix_MultVec3f(gCalcMatrix, &spC4, &sp94);
}
Matrix_Push(&gGfxMatrix);
sp80 = gChargeTimers[player->num] / 20.0f;
Matrix_Translate(gGfxMatrix, sp94.x, sp94.y, sp94.z, MTXF_NEW);
Matrix_Scale(gGfxMatrix, sp80, sp80, 1.0f, MTXF_APPLY);
FrameInterpolation_RecordOpenChild("ArwingLaserCharge", player->num);
Matrix_Push(&gGfxMatrix);
if (player->alternateView && (gLevelMode == LEVELMODE_ON_RAILS)) {
@@ -1089,6 +1108,10 @@ void Display_ArwingLaserCharge(Player* player) {
gSPDisplayList(gMasterDisp++, aStarDL);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
FrameInterpolation_RecordOpenChild("ArwingLaserCharge2", player->num);
if (player->alternateView && (gLevelMode == LEVELMODE_ON_RAILS)) {
Matrix_Scale(gGfxMatrix, 0.3f, 0.3f, 0.3f, MTXF_APPLY);
}
@@ -1103,6 +1126,8 @@ void Display_ArwingLaserCharge(Player* player) {
Matrix_SetGfxMtx(&gMasterDisp);
gSPDisplayList(gMasterDisp++, aOrbDL);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
if (gMuzzleFlashScale[player->num] > 0.1f) {
Matrix_Push(&gGfxMatrix);
@@ -1124,10 +1149,10 @@ void Display_ArwingLaserCharge(Player* player) {
Matrix_MultVec3f(gCalcMatrix, &spC4, &sp94);
}
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash", 0);
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash1", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, sp94.x, sp94.y, sp94.z, MTXF_NEW);
Matrix_Scale(gGfxMatrix, gMuzzleFlashScale[player->num], gMuzzleFlashScale[player->num], 1.0f,
@@ -1152,10 +1177,11 @@ void Display_ArwingLaserCharge(Player* player) {
}
Matrix_MultVec3f(gCalcMatrix, &spAC, &sp94);
Matrix_MultVec3f(gCalcMatrix, &spA0, &sp88);
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash", 0);
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash2", player->num);
Matrix_Push(&gGfxMatrix);
Matrix_Translate(gGfxMatrix, sp94.x, sp94.y, sp94.z, MTXF_NEW);
Matrix_Scale(gGfxMatrix, gMuzzleFlashScale[player->num], gMuzzleFlashScale[player->num], 1.0f,
@@ -1170,7 +1196,7 @@ void Display_ArwingLaserCharge(Player* player) {
Matrix_Push(&gGfxMatrix);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash", 1);
FrameInterpolation_RecordOpenChild("ArwingMuzzleFlash3", player->num);
Matrix_Translate(gGfxMatrix, sp88.x, sp88.y, sp88.z, MTXF_NEW);
Matrix_Scale(gGfxMatrix, gMuzzleFlashScale[player->num], gMuzzleFlashScale[player->num], 1.0f,
@@ -1343,7 +1369,7 @@ void Display_ArwingWingTrail_Draw(Player* player) {
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 100);
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("WingTrail", 0);
FrameInterpolation_RecordOpenChild("WingTrail", player->num);
if (player->arwing.leftWingState == WINGSTATE_INTACT) {
Matrix_Push(&gGfxMatrix);
@@ -1363,7 +1389,7 @@ void Display_ArwingWingTrail_Draw(Player* player) {
FrameInterpolation_RecordCloseChild();
// @port: Tag the transform.
FrameInterpolation_RecordOpenChild("WingTrail", 1);
FrameInterpolation_RecordOpenChild("WingTrail2", player->num);
if (player->arwing.rightWingState == WINGSTATE_INTACT) {
Matrix_Push(&gGfxMatrix);
@@ -1637,8 +1663,8 @@ void Display_ActorMarks(void) {
for (i = 0; i < ARRAY_COUNT(gTeamArrowsViewPos); i++) {
if (gTeamArrowsViewPos[i].z < 0.0f) {
FrameInterpolation_RecordOpenChild(&gTeamArrowsViewPos[i], i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
FrameInterpolation_RecordOpenChild("ActorMarks", i);
var_fs0 = (VEC3F_MAG(&gTeamArrowsViewPos[i])) * 0.0015f;
if (var_fs0 > 100.0f) {
var_fs0 = 100.0f;
@@ -1683,8 +1709,7 @@ void Display_LockOnIndicator(void) {
if (gLockOnTargetViewPos[i].z < 0.0f) {
var_fs0 = VEC3F_MAG(&gLockOnTargetViewPos[i]);
if (var_fs0 < 20000.0f) {
FrameInterpolation_RecordOpenChild("LcckOnIndicator", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
FrameInterpolation_RecordOpenChild("LockOnIndicator", i);
var_fs0 *= 0.0015f;
if (var_fs0 > 100.0f) {
var_fs0 = 100.0f;
@@ -1797,9 +1822,7 @@ void Display_CsLevelCompleteHandleCamera(Player* player) {
break;
}
}
#if 1
f32 gTestVarF = 0.0f;
#endif
void Display_Update(void) {
s32 i;
Vec3f tempVec;
@@ -1895,8 +1918,7 @@ void Display_Update(void) {
printf("CAMERA 1 SKIPED: %d\n", camSkipTimes++);
gCamera1Skipped = true;
} else {
FrameInterpolation_RecordOpenChild("GamePlayCam", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
FrameInterpolation_RecordOpenChild("GamePlayCam", camPlayer->num);
gCamera1Skipped = false;
}
@@ -1919,10 +1941,8 @@ void Display_Update(void) {
}
Background_DrawBackdrop();
FrameInterpolation_RecordOpenChild("Sun", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Background_DrawSun();
FrameInterpolation_RecordCloseChild();
Matrix_Push(&gGfxMatrix);
Matrix_LookAt(gGfxMatrix, gPlayCamEye.x, gPlayCamEye.y, gPlayCamEye.z, gPlayCamAt.x, gPlayCamAt.y, gPlayCamAt.z,
playerCamUp.x, playerCamUp.y, playerCamUp.z, MTXF_APPLY);
@@ -1938,10 +1958,7 @@ void Display_Update(void) {
Matrix_Pop(&gGfxMatrix);
} else if (gGroundSurface != SURFACE_WATER) {
D_bg_8015F964 = false;
FrameInterpolation_RecordOpenChild("Ground", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Background_DrawGround();
FrameInterpolation_RecordCloseChild();
}
}
@@ -2010,10 +2027,7 @@ void Display_Update(void) {
if ((gGroundSurface == SURFACE_WATER) || (gAqDrawMode != 0)) {
D_bg_8015F964 = true;
Effect_Draw(1);
FrameInterpolation_RecordOpenChild("Ground", 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Background_DrawGround();
FrameInterpolation_RecordCloseChild();
}
if ((gCurrentLevel != LEVEL_AQUAS) &&
@@ -2026,12 +2040,9 @@ void Display_Update(void) {
for (i = 0, player = &gPlayer[0]; i < gCamCount; i++, player++) {
if (sPlayersVisible[i]) {
FrameInterpolation_RecordOpenChild(player, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Display_PlayerShadow_Update(player);
Display_PlayerFeatures(player);
Display_ArwingWingTrail_Update(player);
FrameInterpolation_RecordCloseChild();
}
}
+20 -14
View File
@@ -833,8 +833,7 @@ void ItemCheckpoint_Draw(ItemCheckpoint* this) {
s32 i;
if (((gGameFrameCount & 0x18) != 0) && (this->state == 0)) {
FrameInterpolation_RecordOpenChild(this, 0);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
FrameInterpolation_RecordOpenChild("ItemCheckpoint", 0);
Matrix_Push(&gGfxMatrix);
RCP_SetupDL(&gMasterDisp, SETUPDL_64);
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255);
@@ -846,14 +845,14 @@ void ItemCheckpoint_Draw(ItemCheckpoint* this) {
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
FrameInterpolation_RecordOpenChild(this, 1);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
RCP_SetupDL(&gMasterDisp, SETUPDL_29);
gSPTexture(gMasterDisp++, 2000, 2000, 0, G_TX_RENDERTILE, G_ON);
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
Matrix_RotateZ(gGfxMatrix, this->unk_58 * M_DTOR, MTXF_APPLY);
for (i = 0; i < 8; i++) {
FrameInterpolation_RecordOpenChild("ItemCheckpoint", i + 1);
Matrix_Push(&gGfxMatrix);
Matrix_RotateZ(gGfxMatrix, i * 45.0f * M_DTOR, MTXF_APPLY);
Matrix_Translate(gGfxMatrix, 2.0f * this->width, 0.0f, 0.0f, MTXF_APPLY);
@@ -861,9 +860,10 @@ void ItemCheckpoint_Draw(ItemCheckpoint* this) {
Graphics_SetScaleMtx(2.0f * this->unk_50);
gSPDisplayList(gMasterDisp++, D_101CAE0);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
FrameInterpolation_RecordCloseChild();
}
void ItemSilverRing_Draw(ItemSilverRing* this) {
@@ -1797,7 +1797,7 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, scenery360 = gScenery360; i < 200; i++, scenery360++) {
FrameInterpolation_RecordOpenChild(scenery360, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if ((scenery360->obj.status == OBJ_ACTIVE) && (scenery360->obj.id != OBJ_SCENERY_LEVEL_OBJECTS)) {
if (gCurrentLevel == LEVEL_BOLSE) {
spAC.x = scenery360->sfxSource[0];
@@ -1810,6 +1810,7 @@ void Object_DrawAll(s32 cullDirection) {
Scenery360_Draw(scenery360);
Matrix_Pop(&gGfxMatrix);
}
FrameInterpolation_RecordCloseChild();
}
} else {
@@ -1817,7 +1818,7 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, scenery = gScenery; i < ARRAY_COUNT(gScenery); i++, scenery++) {
if (scenery->obj.status >= OBJ_ACTIVE) {
FrameInterpolation_RecordOpenChild(scenery, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if (cullDirection > 0) {
Display_SetSecondLight(&scenery->obj.pos);
}
@@ -1825,6 +1826,7 @@ void Object_DrawAll(s32 cullDirection) {
Scenery_Draw(scenery, cullDirection);
Matrix_Pop(&gGfxMatrix);
Object_UpdateSfxSource(scenery->sfxSource);
FrameInterpolation_RecordCloseChild();
}
}
@@ -1833,7 +1835,7 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, boss = &gBosses[0]; i < ARRAY_COUNT(gBosses); i++, boss++) {
if ((boss->obj.status >= OBJ_ACTIVE) && (boss->obj.id != OBJ_BOSS_BO_BASE_SHIELD)) {
FrameInterpolation_RecordOpenChild(boss, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if ((boss->timer_05C % 2) == 0) {
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
} else {
@@ -1850,6 +1852,7 @@ void Object_DrawAll(s32 cullDirection) {
Object_DrawShadow(i, &boss->obj);
Matrix_Pop(&gGfxMatrix);
}
FrameInterpolation_RecordCloseChild();
}
}
@@ -1860,7 +1863,7 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, sprite = &gSprites[0]; i < ARRAY_COUNT(gSprites); i++, sprite++) {
if ((sprite->obj.status >= OBJ_ACTIVE) && func_enmy_80060FE4(&sprite->obj.pos, -12000.0f)) {
FrameInterpolation_RecordOpenChild(sprite, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Matrix_Push(&gGfxMatrix);
if ((sprite->obj.id == OBJ_SPRITE_CO_RUIN1) || (sprite->obj.id == OBJ_SPRITE_CO_RUIN2)) {
@@ -1871,6 +1874,7 @@ void Object_DrawAll(s32 cullDirection) {
Sprite_Draw(sprite, cullDirection);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
}
@@ -1878,7 +1882,7 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, actor = &gActors[0]; i < ARRAY_COUNT(gActors); i++, actor++) {
if (actor->obj.status >= OBJ_ACTIVE) {
FrameInterpolation_RecordOpenChild(actor, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if ((actor->timer_0C6 % 2) == 0) {
if (gCurrentLevel == LEVEL_UNK_15) {
RCP_SetupDL_23();
@@ -1940,12 +1944,13 @@ void Object_DrawAll(s32 cullDirection) {
for (i = 0, item = &gItems[0]; i < ARRAY_COUNT(gItems); i++, item++) {
if (item->obj.status >= OBJ_ACTIVE) {
FrameInterpolation_RecordOpenChild(item, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Matrix_Push(&gGfxMatrix);
RCP_SetupDL(&gMasterDisp, SETUPDL_29);
Object_SetCullDirection(cullDirection);
Item_Draw(item, cullDirection);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
}
@@ -1964,7 +1969,7 @@ void Effect_DrawAll(s32 arg0) {
for (i = 0, effect = &gEffects[0]; i < ARRAY_COUNT(gEffects); i++, effect++) {
if (effect->obj.status >= OBJ_ACTIVE) {
FrameInterpolation_RecordOpenChild(effect, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if (effect->info.unk_14 == 1) {
effect->obj.rot.y = RAD_TO_DEG(-gPlayer[gPlayerNum].camYaw);
effect->obj.rot.x = RAD_TO_DEG(gPlayer[gPlayerNum].camPitch);
@@ -1985,6 +1990,7 @@ void Effect_DrawAll(s32 arg0) {
Matrix_Pop(&gGfxMatrix);
}
}
FrameInterpolation_RecordCloseChild();
}
}
@@ -1992,7 +1998,7 @@ void Effect_DrawAll(s32 arg0) {
for (i = 0, boss = &gBosses[0]; i < ARRAY_COUNT(gBosses); i++, boss++) {
if ((boss->obj.status >= OBJ_ACTIVE) && (boss->obj.id == OBJ_BOSS_BO_BASE_SHIELD)) {
FrameInterpolation_RecordOpenChild(boss, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if ((boss->timer_05C % 2) == 0) {
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
} else {
@@ -2002,6 +2008,7 @@ void Effect_DrawAll(s32 arg0) {
Matrix_Push(&gGfxMatrix);
Boss_Draw(boss, arg0);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
}
@@ -2065,7 +2072,6 @@ void TexturedLine_Draw(void) {
for (i = 0; i < ARRAY_COUNT(gTexturedLines); i++) {
TexturedLine* texLine = &gTexturedLines[i];
FrameInterpolation_RecordOpenChild(texLine, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
if (gTexturedLines[i].mode != 0) {
Matrix_Push(&gGfxMatrix);
+2 -1
View File
@@ -148,10 +148,11 @@ void BonusText_DrawAll(void) {
for (i = 0, bonus = gBonusText; i < ARRAY_COUNT(gBonusText); i++, bonus++) {
if (bonus->hits != 0) {
FrameInterpolation_RecordOpenChild(bonus, i);
FrameInterpolation_RecordMarker(__FILE__, __LINE__);
Matrix_Push(&gGfxMatrix);
BonusText_Draw(bonus);
Matrix_Pop(&gGfxMatrix);
FrameInterpolation_RecordCloseChild();
}
}
+1 -1
View File
@@ -2919,7 +2919,7 @@ void Play_Init(void) {
D_ctx_801782C8 = 0;
if (gCurrentLevel == LEVEL_TITANIA) {
Ground_801B5110(0.0f, 0.0f, 200.0f);
Ground_Init(0.0f, 0.0f, 200.0f);
}
if (gCurrentLevel == LEVEL_AQUAS) {
gWaterLevel = 1000.0f;
+120 -104
View File
@@ -9,15 +9,15 @@ void Ground_801B68A8(Gfx** dlist, s32 arg1, s32 arg2);
typedef struct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ f32 unk_08;
/* 0x0C */ f32 unk_0C;
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x04 */ s32 type;
/* 0x08 */ f32 xPos;
/* 0x0C */ f32 zPos;
/* 0x10 */ f32 xRot;
/* 0x14 */ f32 yRot;
/* 0x18 */ f32 zRot;
/* 0x1C */ s16 unk_1C;
/* 0x20 */ f32 unk_20;
} UnkStruct_801C62E8; // size = 0x24
} GroundObj; // size = 0x24
typedef union {
f32 a[3];
@@ -64,79 +64,80 @@ s32 D_i5_801C5C04;
s32 D_i5_801C5C08;
s32 D_i5_801C5C0C;
f32 D_i5_801C5C10;
s32 D_i5_801C5C14;
Mtx D_i5_801C5C18[27];
s32 sGroundMode;
Mtx sGroundMtx[27];
Vec3f D_i5_801C62D8;
UnkStruct_801C62E8 D_i5_801C62E8[20];
GroundObj sGroundList[20];
Vec3fa D_i5_801C65B8[3][15][4];
s32 D_i5_801C6E28[4][3];
bool Ground_801B49D0(Actor* actor) {
bool Ground_List_Setup(TiTerrain* actor) {
s32 i;
bool found = false;
UnkStruct_801C62E8* var_v0 = D_i5_801C62E8;
GroundObj* ground = sGroundList;
for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_v0++) {
if (var_v0->unk_00 == 0) {
for (i = 0; i < ARRAY_COUNT(sGroundList); i++, ground++) {
if (ground->unk_00 == 0) {
found = true;
var_v0->unk_00 = 1;
var_v0->unk_04 = actor->obj.pos.y;
var_v0->unk_08 = actor->obj.pos.x;
var_v0->unk_0C = actor->obj.pos.z;
var_v0->unk_10 = actor->obj.rot.x;
var_v0->unk_14 = actor->obj.rot.y;
var_v0->unk_18 = actor->obj.rot.z;
ground->unk_00 = 1;
ground->type = actor->obj.pos.y; // ???
ground->xPos = actor->obj.pos.x;
ground->zPos = actor->obj.pos.z;
ground->xRot = actor->obj.rot.x;
ground->yRot = actor->obj.rot.y;
ground->zRot = actor->obj.rot.z;
break;
}
}
actor->obj.status = 0;
actor->obj.status = OBJ_FREE;
return found;
}
void Ground_801B4A54(UnkStruct_801C62E8* arg0) {
void Ground_GroundObj_Clear(GroundObj* arg0) {
// Lots of conversions between floats, and ints unnecessarily here because of this chain assignment.
arg0->unk_00 = arg0->unk_04 = arg0->unk_08 = arg0->unk_0C = arg0->unk_10 = arg0->unk_14 = arg0->unk_18 =
arg0->unk_1C = arg0->unk_20 = 0;
arg0->unk_00 = arg0->type = arg0->xPos = arg0->zPos = arg0->xRot = arg0->yRot = arg0->zRot = arg0->unk_1C =
arg0->unk_20 = 0;
}
void Ground_801B4AA8(s32* arg0, s32* arg1) {
Actor actor;
UnkStruct_801C62E8* var_s2 = D_i5_801C62E8;
GroundObj* ground = sGroundList;
s32* var_s1;
f32 temp_fa0;
f32 temp_fs0;
f32 temp_fs1;
f32 var_fv0;
f32 var_fv1;
s32 unk_04;
f32 unk_08;
f32 unk_10;
f32 unk_14;
f32 unk_18;
s32 type;
f32 xPos;
f32 xRot;
f32 yRot;
f32 zRot;
s32 i;
s32 j;
for (i = 0; i < ARRAY_COUNT(D_i5_801C62E8); i++, var_s2++) {
if (var_s2->unk_00 != 0) {
unk_04 = var_s2->unk_04;
unk_08 = var_s2->unk_08;
unk_10 = var_s2->unk_10;
unk_14 = var_s2->unk_14;
unk_18 = var_s2->unk_18;
for (i = 0; i < ARRAY_COUNT(sGroundList); i++, ground++) {
if (ground->unk_00 != 0) {
type = ground->type;
xPos = ground->xPos;
xRot = ground->xRot;
yRot = ground->yRot;
zRot = ground->zRot;
var_s1 = arg0;
if (arg0 == NULL) {
unk_04 = D_i5_801BA970[unk_04];
type = D_i5_801BA970[type];
}
if (var_s2->unk_00 == 1) {
switch (unk_04) {
if (ground->unk_00 == 1) {
switch (type) {
case 0:
break;
case 1:
case 3:
var_s2->unk_20 = var_s2->unk_18;
ground->unk_20 = ground->zRot;
break;
case 4:
@@ -161,109 +162,107 @@ void Ground_801B4AA8(s32* arg0, s32* arg1) {
case 8:
PRINTF("RANDAMU YAMA\n"); // RANDOM MOUNTAIN
var_s2->unk_20 = 5000.0f;
ground->unk_20 = 5000.0f;
break;
}
var_s2->unk_00 = 2;
ground->unk_00 = 2;
}
switch (unk_04) {
switch (type) {
case 0:
break;
case 1:
for (j = 0; j < 16; j++, var_s1++) {
temp_fs0 = (j * 220.0f * D_i5_801BE740) - 1760.0f - unk_08;
if (fabsf(temp_fs0) <= unk_10) {
temp_fs1 = __sinf((var_s2->unk_20 / unk_18) * (M_DTOR * 180.0f));
var_fv0 = __cosf((temp_fs0 / unk_10) * (M_DTOR * 90.0f));
*var_s1 += var_fv0 * unk_14 * temp_fs1;
temp_fs0 = (j * 220.0f * D_i5_801BE740) - 1760.0f - xPos;
if (fabsf(temp_fs0) <= xRot) {
temp_fs1 = __sinf((ground->unk_20 / zRot) * (M_DTOR * 180.0f));
var_fv0 = __cosf((temp_fs0 / xRot) * (M_DTOR * 90.0f));
*var_s1 += var_fv0 * yRot * temp_fs1;
}
}
var_s2->unk_20 -= 220.0f;
if (var_s2->unk_20 <= 0.0f) {
Ground_801B4A54(var_s2);
ground->unk_20 -= 220.0f;
if (ground->unk_20 <= 0.0f) {
Ground_GroundObj_Clear(ground);
}
break;
case 2:
unk_08 += (1760.0f - (unk_10 * 0.5f));
var_fv1 = unk_14;
xPos += (1760.0f - (xRot * 0.5f));
var_fv1 = yRot;
if (var_s2->unk_20 <= var_fv1 / (70.0f * M_DTOR)) {
var_fv1 = var_s2->unk_20 * (70.0f * M_DTOR);
} else if (var_fv1 / (70.0f * M_DTOR) >= (unk_18 - var_s2->unk_20)) {
var_fv1 = (unk_18 - var_s2->unk_20) * (70.0f * M_DTOR);
if (ground->unk_20 <= var_fv1 / (70.0f * M_DTOR)) {
var_fv1 = ground->unk_20 * (70.0f * M_DTOR);
} else if (var_fv1 / (70.0f * M_DTOR) >= (zRot - ground->unk_20)) {
var_fv1 = (zRot - ground->unk_20) * (70.0f * M_DTOR);
}
for (j = 0, var_fv0 = 0.0f; j < 16; j++, var_fv0 += 220.0f, var_s1++) {
if (unk_08 <= var_fv0 && var_fv0 <= (unk_08 + unk_10) && *var_s1 < var_fv1) {
if (xPos <= var_fv0 && var_fv0 <= (xPos + xRot) && *var_s1 < var_fv1) {
*var_s1 = var_fv1;
}
}
var_s2->unk_20 += 220.0f;
if (unk_18 <= var_s2->unk_20) {
Ground_801B4A54(var_s2);
ground->unk_20 += 220.0f;
if (zRot <= ground->unk_20) {
Ground_GroundObj_Clear(ground);
}
break;
case 3:
for (j = 0; j < 16; j++, var_s1++) {
temp_fs0 =
(j * 220.0f * D_i5_801BE740) - 1760.0f - var_s2->unk_08 +
(__sinf(((var_s2->unk_20 * 8.0f) / var_s2->unk_18) * 2 * (M_DTOR * 180.0f)) * 500.0f);
if (fabsf(temp_fs0) <= var_s2->unk_10) {
temp_fa0 = __cosf((temp_fs0 / var_s2->unk_10) * (M_DTOR * 90.0f));
temp_fs0 = (j * 220.0f * D_i5_801BE740) - 1760.0f - ground->xPos +
(__sinf(((ground->unk_20 * 8.0f) / ground->zRot) * 2 * (M_DTOR * 180.0f)) * 500.0f);
if (fabsf(temp_fs0) <= ground->xRot) {
temp_fa0 = __cosf((temp_fs0 / ground->xRot) * (M_DTOR * 90.0f));
if (temp_fa0 >= 0.7) {
temp_fa0 = 0.7f;
}
*var_s1 -=
temp_fa0 * var_s2->unk_14 * 4.0f * ((var_s2->unk_18 - var_s2->unk_20) / var_s2->unk_18);
temp_fa0 * ground->yRot * 4.0f * ((ground->zRot - ground->unk_20) / ground->zRot);
}
*var_s1 +=
(var_s2->unk_14 - ((var_s2->unk_20 / var_s2->unk_18) * var_s2->unk_14)) * 4.0f * 0.7f;
*var_s1 += (ground->yRot - ((ground->unk_20 / ground->zRot) * ground->yRot)) * 4.0f * 0.7f;
}
var_s2->unk_20 -= 220.0f;
if (var_s2->unk_20 <= 0.0f) {
Ground_801B4A54(var_s2);
ground->unk_20 -= 220.0f;
if (ground->unk_20 <= 0.0f) {
Ground_GroundObj_Clear(ground);
}
break;
case 8:
if (var_s2->unk_1C <= 0) {
for (j = 0; j < (s32) var_s2->unk_18; j++) {
var_s2->unk_1C = 1;
if (ground->unk_1C <= 0) {
for (j = 0; j < (s32) ground->zRot; j++) {
ground->unk_1C = 1;
actor.obj.pos.x = RAND_FLOAT(3300.0f) - 1650.0f;
actor.obj.pos.z = 0.0f;
actor.obj.pos.y = 1.0f;
actor.obj.rot.x = var_s2->unk_10 + RAND_FLOAT(var_s2->unk_10) * 0.25f;
actor.obj.rot.x = ground->xRot + RAND_FLOAT(ground->xRot) * 0.25f;
actor.obj.rot.z = 2.0f * actor.obj.rot.x; // Should this have been obj.rot.y?
actor.obj.rot.z = var_s2->unk_14 + RAND_FLOAT(var_s2->unk_14) * 0.25f;
Ground_801B49D0(&actor);
actor.obj.rot.z = ground->yRot + RAND_FLOAT(ground->yRot) * 0.25f;
Ground_List_Setup(&actor);
}
var_s2->unk_20 -= 220.0f;
if (var_s2->unk_20 <= 0.0f) {
Ground_801B4A54(var_s2);
ground->unk_20 -= 220.0f;
if (ground->unk_20 <= 0.0f) {
Ground_GroundObj_Clear(ground);
}
} else {
var_s2->unk_1C--;
ground->unk_1C--;
}
break;
default:
Ground_801B4A54(var_s2);
Ground_GroundObj_Clear(ground);
break;
}
}
}
}
void Ground_801B5110(f32 x, f32 y, f32 z) {
UnkStruct_801C62E8* ptr;
void Ground_Init(f32 x, f32 y, f32 z) {
GroundObj* ptr;
s32 i;
s32 k;
@@ -277,10 +276,10 @@ void Ground_801B5110(f32 x, f32 y, f32 z) {
D_i5_801C62D8.x = x;
D_i5_801C62D8.y = y;
D_i5_801C62D8.z = z;
D_i5_801C5C14 = 1;
sGroundMode = 1;
for (i = 0, ptr = D_i5_801C62E8; i < ARRAY_COUNT(D_i5_801C62E8); i++, ptr++) {
Ground_801B4A54(ptr);
for (i = 0, ptr = sGroundList; i < ARRAY_COUNT(sGroundList); i++, ptr++) {
Ground_GroundObj_Clear(ptr);
}
for (i = 0; i < ARRAY_COUNT(D_i5_801C1D48); i++) {
@@ -350,8 +349,8 @@ void Ground_801B5244(s32 arg0, s32 arg1) {
}
}
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_i5_801C24B8[sp5C] * -220.0f, MTXF_NEW);
Matrix_ToMtx(&D_i5_801C5C18[sp60]);
gSPMatrix(D_i5_801C5C00++, &D_i5_801C5C18[sp60], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
Matrix_ToMtx(&sGroundMtx[sp60]);
gSPMatrix(D_i5_801C5C00++, &sGroundMtx[sp60], G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
gSPEndDisplayList(D_i5_801C5C00++);
sp5C = (sp5C + 1) % 28;
sp60 = (sp60 + 1) % 27;
@@ -369,10 +368,13 @@ void Ground_801B58AC(Gfx** dList, f32 arg1) {
RCP_SetupDL(dList, 0x1D);
RCP_SetFog(dList, gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
spC4 = D_i5_801C5C14;
spC4 = sGroundMode;
// ONE PLANE POLYGON
if (sGroundMode & 2) {
// @port Skip interpolation
FrameInterpolation_ShouldInterpolateFrame(false);
if (D_i5_801C5C14 & 2) {
FrameInterpolation_RecordOpenChild(dList, D_i5_801C5C10);
gDPSetupTile((*dList)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTileTexture((*dList)++, D_TI_6001BA8, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32);
@@ -383,10 +385,16 @@ void Ground_801B58AC(Gfx** dList, f32 arg1) {
gSPDisplayList((*dList)++, D_i5_801BA950);
gSPPopMatrix((*dList)++, G_MTX_MODELVIEW);
Ground_801B4AA8(NULL, &spC4);
FrameInterpolation_RecordCloseChild();
// @port renable interpolation
FrameInterpolation_ShouldInterpolateFrame(true);
}
if (D_i5_801C5C14 & 1) {
// TERRAIN POLYGON
if (sGroundMode & 1) {
// @port Skip interpolation
FrameInterpolation_ShouldInterpolateFrame(false);
if (D_i5_801C5C0C == 1) {
D_i5_801C5C0C = 0;
temp_hi = (D_i5_801C5C08 + 27) % 28;
@@ -421,29 +429,33 @@ void Ground_801B58AC(Gfx** dList, f32 arg1) {
D_i5_801BE748[(D_i5_801C5C04 + 27) % 27][i][1].v.ob[2] = 0;
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_i5_801C24B8[D_i5_801C5C08] * -220.0f, MTXF_NEW);
Matrix_ToMtx(&D_i5_801C5C18[D_i5_801C5C04]);
Matrix_ToMtx(&sGroundMtx[D_i5_801C5C04]);
}
Ground_801B5FE0(D_i5_801C5C08, D_i5_801C5C04, 1);
}
gSPMatrix((*dList)++, &gIdentityMtx, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW);
Ground_801B68A8(dList, D_i5_801C5C04, 1);
gSPPopMatrix((*dList)++, G_MTX_MODELVIEW);
// @port renable interpolation
FrameInterpolation_ShouldInterpolateFrame(true);
}
D_i5_801C5C10 += arg1;
if ((D_i5_801C5C14 & 1) && (D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f <= D_i5_801C5C10)) {
if ((sGroundMode & 1) && (D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f <= D_i5_801C5C10)) {
D_i5_801C5C0C = 1;
D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, D_i5_801C24B8[(D_i5_801C5C08 + 25) % 28] * 220.0f);
D_i5_801C5C04 = (D_i5_801C5C04 + 26) % 27;
D_i5_801C5C08 = (D_i5_801C5C08 + 27) % 28;
}
if (D_i5_801C5C14 & 2) {
if (sGroundMode & 2) {
D_i5_801C5C10 = Math_ModF(D_i5_801C5C10, 220.0f * D_i5_801BE744);
}
D_i5_801C5C14 = spC4;
sGroundMode = spC4;
}
void Ground_801B5FE0(s32 arg0, s32 arg1, s32 arg2) {
@@ -565,10 +577,12 @@ void Ground_801B68A8(Gfx** dlist, s32 arg1, s32 arg2) {
s32 j;
s32 var;
// @port Skip interpolation
FrameInterpolation_ShouldInterpolateFrame(false);
gDPSetupTile((*dlist)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, 0, G_TX_MIRROR | G_TX_WRAP,
G_TX_MIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD);
gDPLoadTileTexture((*dlist)++, D_TI_6001BA8, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32);
FrameInterpolation_RecordOpenChild(dlist, D_i5_801C5C10);
Matrix_Translate(gGfxMatrix, D_i5_801C62D8.x, D_i5_801C62D8.y, D_i5_801C62D8.z + D_i5_801C5C10, MTXF_NEW);
Matrix_ToMtx(gGfxMtx);
gSPMatrix((*dlist)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW);
@@ -579,7 +593,9 @@ void Ground_801B68A8(Gfx** dlist, s32 arg1, s32 arg2) {
gSPDisplayList((*dlist)++, &D_i5_801C2528[j]);
j = (j + 26) % 27;
}
FrameInterpolation_RecordCloseChild();
// @port renable interpolation
FrameInterpolation_ShouldInterpolateFrame(true);
}
bool Ground_801B6AEC(f32 arg0, f32 arg1, f32 arg2) {
@@ -694,7 +710,7 @@ s32 Ground_801B6E20(f32 arg0, f32 arg1, f32* arg2, f32* arg3, f32* arg4) {
*arg4 = 0.0f;
*arg2 = 0.0f;
if (D_i5_801C5C14 & 1) {
if (sGroundMode & 1) {
temp_fs2 = arg1 - D_i5_801C5C10 - D_i5_801C62D8.z;
var_v1 = 0;
var_s6 = (D_i5_801C5C04 + 25) % 27;
+1 -1
View File
@@ -121,7 +121,7 @@ void Titania_Effect368_Spawn(f32 xPos, f32 yPos, f32 zPos, f32 yRot, f32 scale2)
}
void Titania_TiTerrain_Update(TiTerrain* this) {
Ground_801B49D0(this);
Ground_List_Setup(this);
}
Vec3f D_i5_801B7520 = { -150.0f, 0.0f, 0.0f };