From faf5c506fff7dedcdb0cb760e4862bb2bc660f44 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Tue, 10 Mar 2026 13:06:50 -0300 Subject: [PATCH] Add A6Gorgon Cutscene Record from N64 Hardware & Refactor code. --- include/fox_record.h | 17 ++- src/engine/cutscene_record.c | 182 +++++++++++++++++++++++++++++ src/engine/fox_demo.c | 55 +-------- src/overlays/ovl_ending/fox_end1.c | 11 +- src/overlays/ovl_i1/fox_co.c | 37 +----- src/overlays/ovl_i2/fox_me.c | 10 +- src/overlays/ovl_i3/fox_a6.c | 8 ++ src/overlays/ovl_i5/fox_ma.c | 26 +---- src/overlays/ovl_i6/fox_andross.c | 79 +------------ src/overlays/ovl_i6/fox_sy.c | 10 +- 10 files changed, 221 insertions(+), 214 deletions(-) create mode 100644 src/engine/cutscene_record.c diff --git a/include/fox_record.h b/include/fox_record.h index 531b6c42..6077c6bd 100644 --- a/include/fox_record.h +++ b/include/fox_record.h @@ -1,6 +1,6 @@ /** * Used to reproduce recordings made from real N64 hardware - * to accurately reproduce Cutscenes at the correct speed. + * to accurately play cutscenes at the correct speed. * These recordings adjust gVisPerFrame during runtime to produce * the same behaviour as the original game. */ @@ -15,8 +15,19 @@ typedef struct Record { } Record; extern Record gCarrierCutsceneRecord[13]; +extern Record gWarpzoneCsRecord[19]; +extern Record gA6GorgonCsRecord[12]; +extern Record gSyRobotCutsceneRecord[3]; +extern Record gAndrossRobotKillCutscene2[20]; +extern Record gAndrossRobotKillCutscene1[25]; +extern Record gMacbethCutsceneRecord[14]; +extern Record gGrangaCutsceneRecord[13]; +extern Record gMeCrusherCutsceneRecord[3]; +extern Record gEndingCsRecord[37]; -void UpdateVisPerFrameFromRecording(Record* record, s32 maxFrames); -void UpdateVisPerFrameFromRecording_Ending(Record* record, s32 maxFrames); +extern int gA6GorgonCsFrameCount; +extern int gWarpzoneCsFrameCount; + +void UpdateVisPerFrameFromRecording(Record* record, s32 maxFrames, int* frameCounter); #endif diff --git a/src/engine/cutscene_record.c b/src/engine/cutscene_record.c new file mode 100644 index 00000000..611c2bbe --- /dev/null +++ b/src/engine/cutscene_record.c @@ -0,0 +1,182 @@ +#include "global.h" +#include "fox_record.h" + +void UpdateVisPerFrameFromRecording(Record* record, s32 maxFrames, int* frameCounter) { + int i; + + if (*frameCounter > record[maxFrames - 1].frame) { + return; + } + + for (i = 0; i < maxFrames; i++) { + if (*frameCounter == record[i].frame) { + gVIsPerFrame = record[i].vis; + } + } +} + +int gWarpzoneCsFrameCount = 0; +int gA6GorgonCsFrameCount = 0; + +Record gWarpzoneCsRecord[19] = { + { 2, 1 }, { 3, 3 }, { 4, 4 }, { 3, 8 }, { 2, 9 }, { 3, 52 }, { 2, 54 }, { 3, 69 }, { 2, 70 }, { 3, 75 }, + { 2, 76 }, { 3, 79 }, { 2, 117 }, { 3, 118 }, { 2, 120 }, { 3, 145 }, { 2, 215 }, { 3, 216 }, { 2, 230 }, +}; + +Record gA6GorgonCsRecord[12] = { + { 3, 0 }, { 4, 3 }, { 5, 6 }, { 4, 37 }, { 5, 38 }, { 4, 44 }, + { 3, 53 }, { 4, 54 }, { 3, 57 }, { 4, 58 }, { 3, 59 }, { 2, 170 }, +}; + +Record gEndingCsRecord[37] = { + { 2, 0 }, { 5, 1 }, { 2, 2 }, { 3, 277 }, { 2, 278 }, { 3, 340 }, { 2, 397 }, { 3, 537 }, + { 2, 538 }, { 3, 548 }, { 2, 549 }, { 3, 568 }, { 2, 569 }, { 3, 620 }, { 2, 623 }, { 3, 803 }, + { 2, 806 }, { 3, 814 }, { 2, 823 }, { 3, 1282 }, { 2, 1284 }, { 5, 3703 }, { 2, 3704 }, { 4, 3904 }, + { 2, 3905 }, { 3, 4782 }, { 2, 4783 }, { 3, 4785 }, { 2, 4820 }, { 3, 4986 }, { 2, 6779 }, { 5, 6780 }, + { 2, 6781 }, { 3, 6785 }, { 4, 6786 }, { 3, 6793 }, { 2, 6799 }, +}; + +// MeCrusher destroy cutscene timings recorded from a real N64 +Record gMeCrusherCutsceneRecord[3] = { + { 2, 0 }, + { 3, 200 }, + { 2, 224 }, +}; + +// Carrier destroy cutscene timings recorded from a real N64 +Record gCarrierCutsceneRecord[13] = { + { 2, 0 }, + { 3, 2 }, + { 4, 16 }, + { 3, 50 }, + { 4, 58 }, + { 5, 67 }, + { 4, 68 }, + { 5, 71 }, + { 4, 73 }, + { 5, 74 }, + { 4, 106 }, + { 3, 146 }, + { 2, 194 }, +}; + +// Granga destroy cutscene timings recorded from a real N64 +Record gGrangaCutsceneRecord[13] = { + { 2, 0 }, + { 3, 1 }, + { 2, 5 }, + { 3, 7 }, + { 2, 52 }, + { 3, 78 }, + { 4, 103 }, + { 3, 125 }, + { 2, 153 }, + { 3, 155 }, + { 2, 157 }, + { 3, 158 }, + { 2, 160 }, +}; + +// Train cutscene timings recorded from a real N64 +Record gMacbethCutsceneRecord[14] = { + // Train breaking barriers + { 2, 0 }, + { 3, 2 }, + { 2, 31 }, + { 3, 400 }, + { 2, 418 }, + { 3, 433 }, + { 4, 435 }, + { 3, 444 }, + { 2, 509 }, + // { 3, 559 }, + // { 2, 581 }, + // { 3, 587 }, + // Explosions + { 2, 589 }, + { 3, 714 }, + { 4, 821 }, + { 5, 849 }, + { 2, 942 }, +}; + +// clang-format off + +// After defeating Andross +/* +03 00 00 00 02 00 00 08 03 00 00 13 02 00 00 23 03 00 00 9C 02 00 00 A6 03 00 00 C1 04 00 00 C6 03 00 00 C7 04 00 00 C9 +03 00 00 CD 04 00 00 CF 03 00 00 D7 04 00 00 EA 03 00 00 EC 04 00 00 ED 03 00 00 EF 04 00 00 F4 03 00 00 F5 04 00 00 F6 +03 00 01 10 04 00 01 12 03 00 01 22 04 00 01 24 03 00 01 27 04 00 01 2D 03 00 01 2E 04 00 01 30 03 00 01 31 04 00 01 33 +03 00 01 4C 04 00 01 4E 03 00 01 4F +*/ +Record gAndrossRobotKillCutscene1[25] = { + { 3, 0 }, + { 2, 8 }, + { 3, 19 }, + { 2, 35 }, + { 3, 156 }, + { 2, 166 }, + { 3, 193 }, + { 4, 198 }, + { 3, 199 }, + { 4, 201 }, + { 3, 205 }, + { 4, 207 }, + { 3, 215 }, + { 4, 234 }, + // { 3, 236 }, + { 4, 237 }, + { 3, 239 }, + { 4, 244 }, + // { 3, 245 }, + { 4, 246 }, + // { 3, 272 }, + { 4, 274 }, + // { 3, 290 }, + { 4, 292 }, + // { 3, 295 }, // too much? + { 4, 301 }, + // { 3, 302 }, + { 4, 304 }, + // { 3, 305 }, + { 4, 307 }, + // { 3, 332 }, + { 4, 334 }, + // { 3, 335 }, + { 2, 339 }, +}; + +/* +04 00 00 00 02 00 00 01 05 00 00 02 02 00 00 03 03 00 00 2A 02 00 00 2B 03 00 00 39 02 00 00 3A 03 00 00 3F 02 00 00 45 +03 00 00 9E 04 00 00 A1 05 00 00 A3 04 00 00 B6 03 00 00 B9 04 00 00 BD 05 00 00 C1 04 00 00 CD 03 00 00 CF 02 00 00 D3 +*/ +Record gAndrossRobotKillCutscene2[20] = { + { 4, 0 }, + { 2, 1 }, + { 5, 2 }, + { 2, 3 }, + { 3, 42 }, + { 2, 43 }, + { 3, 57 }, + { 2, 58 }, + { 3, 63 }, + { 2, 69 }, + { 3, 158 }, + { 4, 161 }, + { 5, 163 }, + { 4, 182 }, + { 3, 185 }, + { 4, 189 }, + { 5, 193 }, + { 4, 205 }, + { 3, 207 }, + { 2, 211 }, +}; +// clang-format on + +// SyRobot destroy cutscene timings recorded from a real N64 +Record gSyRobotCutsceneRecord[3] = { + { 2, 0 }, + { 3, 129 }, + { 2, 230 }, +}; diff --git a/src/engine/fox_demo.c b/src/engine/fox_demo.c index 8b243ca6..ce091ef0 100644 --- a/src/engine/fox_demo.c +++ b/src/engine/fox_demo.c @@ -22,55 +22,6 @@ #include "fox_co.h" #include "fox_record.h" -int gWarpzoneCsFrameCount = 0; - -Record gWarpzoneCsRecord[] = { - { 2, 1 }, { 3, 3 }, { 4, 4 }, { 3, 8 }, { 2, 9 }, { 3, 52 }, { 2, 54 }, { 3, 69 }, { 2, 70 }, { 3, 75 }, - { 2, 76 }, { 3, 79 }, { 2, 117 }, { 3, 118 }, { 2, 120 }, { 3, 145 }, { 2, 215 }, { 3, 216 }, { 2, 230 }, -}; - -void UpdateVisPerFrameFromRecording(Record* record, s32 maxFrames) { - int i; - - if (gCsFrameCount > record[maxFrames - 1].frame) { - return; - } - - for (i = 0; i < maxFrames; i++) { - if (gCsFrameCount == record[i].frame) { - gVIsPerFrame = record[i].vis; - } - } -} - -void UpdateVisPerFrameFromRecording_Warpzone(Record* record, s32 maxFrames) { - int i; - - if (gWarpzoneCsFrameCount > record[maxFrames - 1].frame) { - return; - } - - for (i = 0; i < maxFrames; i++) { - if (gWarpzoneCsFrameCount == record[i].frame) { - gVIsPerFrame = record[i].vis; - } - } -} - -void UpdateVisPerFrameFromRecording_Ending(Record* record, s32 maxFrames) { - int i; - - if (gGameFrameCount > record[maxFrames - 1].frame) { - return; - } - - for (i = 0; i < maxFrames; i++) { - if (gGameFrameCount == record[i].frame) { - gVIsPerFrame = record[i].vis; - } - } -} - void func_demo_80048AC0(TeamId teamId) { s32 teamShield; @@ -448,8 +399,9 @@ void Cutscene_EnterWarpZone(Player* player) { s32 var_v0; s32 pad[4]; + // @Port: Vi recording gWarpzoneCsFrameCount++; - UpdateVisPerFrameFromRecording_Warpzone(gWarpzoneCsRecord, ARRAY_COUNT(gWarpzoneCsRecord)); + UpdateVisPerFrameFromRecording(gWarpzoneCsRecord, ARRAY_COUNT(gWarpzoneCsRecord), &gWarpzoneCsFrameCount); player->pos.x += player->vel.x; player->flags_228 = 0; @@ -982,7 +934,8 @@ void Cutscene_CoComplete2(Player* player) { Math_SmoothStepToF(&player->camRoll, 0.0f, 0.1f, 5.0f, 0.01f); - UpdateVisPerFrameFromRecording(gCarrierCutsceneRecord, ARRAY_COUNT(gCarrierCutsceneRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gCarrierCutsceneRecord, ARRAY_COUNT(gCarrierCutsceneRecord), &gCsFrameCount); switch (player->csState) { case 10: diff --git a/src/overlays/ovl_ending/fox_end1.c b/src/overlays/ovl_ending/fox_end1.c index 4116210c..ec1890e1 100644 --- a/src/overlays/ovl_ending/fox_end1.c +++ b/src/overlays/ovl_ending/fox_end1.c @@ -9,14 +9,6 @@ #include "port/mods/PortEnhancements.h" #include "fox_record.h" -Record gEndingCsRecord[] = { - { 2, 0 }, { 5, 1 }, { 2, 2 }, { 3, 277 }, { 2, 278 }, { 3, 340 }, { 2, 397 }, { 3, 537 }, - { 2, 538 }, { 3, 548 }, { 2, 549 }, { 3, 568 }, { 2, 569 }, { 3, 620 }, { 2, 623 }, { 3, 803 }, - { 2, 806 }, { 3, 814 }, { 2, 823 }, { 3, 1282 }, { 2, 1284 }, { 5, 3703 }, { 2, 3704 }, { 4, 3904 }, - { 2, 3905 }, { 3, 4782 }, { 2, 4783 }, { 3, 4785 }, { 2, 4820 }, { 3, 4986 }, { 2, 6779 }, { 5, 6780 }, - { 2, 6781 }, { 3, 6785 }, { 4, 6786 }, { 3, 6793 }, { 2, 6799 }, -}; - void Ending_8018CE20(s32); void Ending_801926D4(void); extern u32 D_ending_80192E70; @@ -1116,7 +1108,8 @@ void Ending_Main(void) { Ending_8018B3D8(); Ending_8018ABE8(); - UpdateVisPerFrameFromRecording_Ending(gEndingCsRecord, ARRAY_COUNT(gEndingCsRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gEndingCsRecord, ARRAY_COUNT(gEndingCsRecord), &gGameFrameCount); } void DrawBorders(void) { diff --git a/src/overlays/ovl_i1/fox_co.c b/src/overlays/ovl_i1/fox_co.c index e1a6ddf2..e8bbbea7 100644 --- a/src/overlays/ovl_i1/fox_co.c +++ b/src/overlays/ovl_i1/fox_co.c @@ -11,40 +11,6 @@ #include "port/hooks/Events.h" #include "fox_record.h" -// Carrier destroy cutscene timings recorded from a real N64 -Record gCarrierCutsceneRecord[] = { - { 2, 0 }, - { 3, 2 }, - { 4, 16 }, - { 3, 50 }, - { 4, 58 }, - { 5, 67 }, - { 4, 68 }, - { 5, 71 }, - { 4, 73 }, - { 5, 74 }, - { 4, 106 }, - { 3, 146 }, - { 2, 194 }, -}; - -// Granga destroy cutscene timings recorded from a real N64 -Record gGrangaCutsceneRecord[] = { - { 2, 0 }, - { 3, 1 }, - { 2, 5 }, - { 3, 7 }, - { 2, 52 }, - { 3, 78 }, - { 4, 103 }, - { 3, 125 }, - { 2, 153 }, - { 3, 155 }, - { 2, 157 }, - { 3, 158 }, - { 2, 160 }, -}; - u8 sFightCarrier; f32 sCoGrangaWork[68]; @@ -3489,7 +3455,8 @@ void Corneria_LevelComplete1(Player* player) { f32 temp_fa1; f32 temp_deg; - UpdateVisPerFrameFromRecording(gGrangaCutsceneRecord, ARRAY_COUNT(gGrangaCutsceneRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gGrangaCutsceneRecord, ARRAY_COUNT(gGrangaCutsceneRecord), &gCsFrameCount); player->arwing.upperRightFlapYrot = player->arwing.upperLeftFlapYrot = player->arwing.bottomRightFlapYrot = player->arwing.bottomLeftFlapYrot = 0.0f; diff --git a/src/overlays/ovl_i2/fox_me.c b/src/overlays/ovl_i2/fox_me.c index f2cec042..02be4e00 100644 --- a/src/overlays/ovl_i2/fox_me.c +++ b/src/overlays/ovl_i2/fox_me.c @@ -8,13 +8,6 @@ #include "assets/ast_meteo.h" #include "fox_record.h" -// MeCrusher destroy cutscene timings recorded from a real N64 -Record gMeCrusherCutsceneRecord[] = { - { 2, 0 }, - { 3, 200 }, - { 2, 224 }, -}; - Vec3f D_i2_80195430[] = { { 122.0, -5.0, -1200.0 }, { 122.0, -103.0, -727.0 }, { 142.0, -323.0, -848.0 }, { 362.0, -59.0, -435.0 }, { 692.0, -84.0, -308.0 }, { 1000.0, -7.0, -308.0 }, { 164.0, -700.0, -308.0 }, { 263.0, -370.0, -11.0 }, @@ -2434,7 +2427,8 @@ void Meteo_LevelComplete(Player* player) { Math_SmoothStepToAngle(&player->aerobaticPitch, 0.0f, 0.1f, 20.0f, 0.0f); Math_SmoothStepToF(&player->boostSpeed, 0.0f, 0.1f, 3.0f, 0.0f); - UpdateVisPerFrameFromRecording(gMeCrusherCutsceneRecord, ARRAY_COUNT(gMeCrusherCutsceneRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gMeCrusherCutsceneRecord, ARRAY_COUNT(gMeCrusherCutsceneRecord), &gCsFrameCount); switch (player->csState) { case 0: diff --git a/src/overlays/ovl_i3/fox_a6.c b/src/overlays/ovl_i3/fox_a6.c index f2426fa8..1facf2b2 100644 --- a/src/overlays/ovl_i3/fox_a6.c +++ b/src/overlays/ovl_i3/fox_a6.c @@ -6,6 +6,7 @@ #include "global.h" #include "assets/ast_area_6.h" +#include "fox_record.h" void Area6_8018A1B0(Boss* this, s32 arg1); void Area6_8018A2C4(Boss* this); @@ -425,6 +426,9 @@ void Area6_A6Gorgon_Init(A6Gorgon* this) { gProjectFar = 25000.0f; gBossFrameCount = 0; + // @Port: Vi recording + gA6GorgonCsFrameCount = 0; + this->health = 780; this->fwork[A6_FWK_2] = this->fwork[A6_FWK_34] = 2.0f; @@ -1187,6 +1191,10 @@ void Area6_A6Gorgon_Update(A6Gorgon* this) { break; case 11: + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gA6GorgonCsRecord, ARRAY_COUNT(gA6GorgonCsRecord), &gA6GorgonCsFrameCount); + gA6GorgonCsFrameCount++; + if ((this->timer_052 == 160) && ((gPlayer[0].state == PLAYERSTATE_ACTIVE) || (gPlayer[0].state == PLAYERSTATE_U_TURN))) { gPlayer[0].state = PLAYERSTATE_LEVEL_COMPLETE; diff --git a/src/overlays/ovl_i5/fox_ma.c b/src/overlays/ovl_i5/fox_ma.c index edc31257..f6b6bd52 100644 --- a/src/overlays/ovl_i5/fox_ma.c +++ b/src/overlays/ovl_i5/fox_ma.c @@ -60,29 +60,6 @@ Vec3f D_i5_801BE688[2]; Vec3f D_i5_801BE6A0[12]; s32 D_i5_801BE734[4]; -// Train cutscene timings recorded from a real N64 -Record gMacbethCutsceneRecord[] = { - // Train breaking barriers - { 2, 0 }, - { 3, 2 }, - { 2, 31 }, - { 3, 400 }, - { 2, 418 }, - { 3, 433 }, - { 4, 435 }, - { 3, 444 }, - { 2, 509 }, - // { 3, 559 }, - // { 2, 581 }, - // { 3, 587 }, - // Explosions - { 2, 589 }, - { 3, 714 }, - { 4, 821 }, - { 5, 849 }, - { 2, 942 }, -}; - UnkStruct_D_i5_801B8E50 D_i5_801B8E50[156] = { { 5174.4f, -2141.0f, 0.0f, 350.0f, OBJ_SCENERY_MA_TRAIN_TRACK_3 }, { 3401.4f, -1828.0f, 0.0f, 350.0f, OBJ_SCENERY_MA_TRAIN_TRACK_3 }, @@ -6509,7 +6486,8 @@ void Macbeth_LevelComplete2(Player* player) { Vec3f spD8; f32 zeroVar = 0.0f; - UpdateVisPerFrameFromRecording(gMacbethCutsceneRecord, ARRAY_COUNT(gMacbethCutsceneRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gMacbethCutsceneRecord, ARRAY_COUNT(gMacbethCutsceneRecord), &gCsFrameCount); switch (player->csState) { case 0: diff --git a/src/overlays/ovl_i6/fox_andross.c b/src/overlays/ovl_i6/fox_andross.c index ba243c31..18d6cf82 100644 --- a/src/overlays/ovl_i6/fox_andross.c +++ b/src/overlays/ovl_i6/fox_andross.c @@ -3852,80 +3852,6 @@ f32 D_i6_801A7F4C; f32 D_i6_801A7F50; f32 D_i6_801A7F54; -// clang-format off - -// After defeating Andross -/* -03 00 00 00 02 00 00 08 03 00 00 13 02 00 00 23 03 00 00 9C 02 00 00 A6 03 00 00 C1 04 00 00 C6 03 00 00 C7 04 00 00 C9 -03 00 00 CD 04 00 00 CF 03 00 00 D7 04 00 00 EA 03 00 00 EC 04 00 00 ED 03 00 00 EF 04 00 00 F4 03 00 00 F5 04 00 00 F6 -03 00 01 10 04 00 01 12 03 00 01 22 04 00 01 24 03 00 01 27 04 00 01 2D 03 00 01 2E 04 00 01 30 03 00 01 31 04 00 01 33 -03 00 01 4C 04 00 01 4E 03 00 01 4F -*/ -Record gAndrossRobotKillCutscene1[] = { - { 3, 0 }, - { 2, 8 }, - { 3, 19 }, - { 2, 35 }, - { 3, 156 }, - { 2, 166 }, - { 3, 193 }, - { 4, 198 }, - { 3, 199 }, - { 4, 201 }, - { 3, 205 }, - { 4, 207 }, - { 3, 215 }, - { 4, 234 }, - // { 3, 236 }, - { 4, 237 }, - { 3, 239 }, - { 4, 244 }, - // { 3, 245 }, - { 4, 246 }, - // { 3, 272 }, - { 4, 274 }, - // { 3, 290 }, - { 4, 292 }, - // { 3, 295 }, // too much? - { 4, 301 }, - // { 3, 302 }, - { 4, 304 }, - // { 3, 305 }, - { 4, 307 }, - // { 3, 332 }, - { 4, 334 }, - // { 3, 335 }, - { 2, 339 }, -}; - -/* -04 00 00 00 02 00 00 01 05 00 00 02 02 00 00 03 03 00 00 2A 02 00 00 2B 03 00 00 39 02 00 00 3A 03 00 00 3F 02 00 00 45 -03 00 00 9E 04 00 00 A1 05 00 00 A3 04 00 00 B6 03 00 00 B9 04 00 00 BD 05 00 00 C1 04 00 00 CD 03 00 00 CF 02 00 00 D3 -*/ -Record gAndrossRobotKillCutscene2[] = { - { 4, 0 }, - { 2, 1 }, - { 5, 2 }, - { 2, 3 }, - { 3, 42 }, - { 2, 43 }, - { 3, 57 }, - { 2, 58 }, - { 3, 63 }, - { 2, 69 }, - { 3, 158 }, - { 4, 161 }, - { 5, 163 }, - { 4, 182 }, - { 3, 185 }, - { 4, 189 }, - { 5, 193 }, - { 4, 205 }, - { 3, 207 }, - { 2, 211 }, -}; -// clang-format on - // Andross_LevelComplete void Andross_80193C4C(Player* player) { s32 i; @@ -3938,10 +3864,11 @@ void Andross_80193C4C(Player* player) { Vec3f sp68; s32 rnd; + // @Port: Vi recording if (player->csState < 3) { - UpdateVisPerFrameFromRecording(gAndrossRobotKillCutscene1, ARRAY_COUNT(gAndrossRobotKillCutscene1)); + UpdateVisPerFrameFromRecording(gAndrossRobotKillCutscene1, ARRAY_COUNT(gAndrossRobotKillCutscene1), &gCsFrameCount); } else if ((player->csState > 2) && player->csState < 6) { - UpdateVisPerFrameFromRecording(gAndrossRobotKillCutscene2, ARRAY_COUNT(gAndrossRobotKillCutscene2)); + UpdateVisPerFrameFromRecording(gAndrossRobotKillCutscene2, ARRAY_COUNT(gAndrossRobotKillCutscene2), &gCsFrameCount); } Math_SmoothStepToF(D_ctx_80177A48, 1.0f, 1.0f, 0.01f, 0.0f); diff --git a/src/overlays/ovl_i6/fox_sy.c b/src/overlays/ovl_i6/fox_sy.c index c24562b4..702f1181 100644 --- a/src/overlays/ovl_i6/fox_sy.c +++ b/src/overlays/ovl_i6/fox_sy.c @@ -30,13 +30,6 @@ void SectorY_801A0510(ActorCutscene*, s32); void SectorY_ActorDebris_Setup(Actor*, f32, f32, f32, f32, f32, f32, s32); void SectorY_ActorDebris_Spawn(f32, f32, f32, f32, f32, f32, s32); -// SyRobot destroy cutscene timings recorded from a real N64 -Record gSyRobotCutsceneRecord[] = { - { 2, 0 }, - { 3, 129 }, - { 2, 230 }, -}; - f32 D_i6_801A8440[3]; void SectorY_80197B30(ActorCutscene* this, s32 timer) { @@ -2144,7 +2137,8 @@ void SectorY_LevelComplete(Player* player) { SyShogun* boss = &gBosses[0]; f32 temp_ft1; - UpdateVisPerFrameFromRecording(gSyRobotCutsceneRecord, ARRAY_COUNT(gSyRobotCutsceneRecord)); + // @Port: Vi recording + UpdateVisPerFrameFromRecording(gSyRobotCutsceneRecord, ARRAY_COUNT(gSyRobotCutsceneRecord), &gCsFrameCount); switch (player->csState) { case 0: