mirror of
https://github.com/HarbourMasters/Starship
synced 2026-05-22 22:44:42 -04:00
Add A6Gorgon Cutscene Record from N64 Hardware & Refactor code.
This commit is contained in:
+14
-3
@@ -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
|
||||
|
||||
@@ -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 },
|
||||
};
|
||||
+4
-51
@@ -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:
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user