2024-01-05 17:32:04 -03:00
|
|
|
/*
|
|
|
|
* File: fox_demo.c
|
|
|
|
* System: Game Engine
|
|
|
|
* Description: Starfox Cutscene Handler
|
|
|
|
*/
|
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
#include "global.h"
|
2024-03-14 16:31:03 -05:00
|
|
|
#include "assets/ast_sector_x.h"
|
|
|
|
#include "assets/ast_aquas.h"
|
|
|
|
#include "assets/ast_great_fox.h"
|
2024-03-16 20:10:21 -03:00
|
|
|
#include "assets/ast_enmy_space.h"
|
2024-03-21 13:45:13 -05:00
|
|
|
#include "assets/ast_enmy_planet.h"
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
extern Gfx D_60320E0[];
|
|
|
|
extern Gfx D_7010970[];
|
|
|
|
|
|
|
|
extern s32 D_800C9E90[];
|
|
|
|
|
2024-02-16 18:58:59 -06:00
|
|
|
extern Animation D_60265B4;
|
|
|
|
extern Animation D_602B8DC;
|
|
|
|
extern Animation D_60034C4;
|
|
|
|
extern Animation D_602A2CC;
|
|
|
|
extern Animation D_602CEB4;
|
|
|
|
extern Animation D_602B778;
|
|
|
|
|
|
|
|
extern f32 D_80178454;
|
|
|
|
extern f32 D_80178458;
|
|
|
|
extern f32 D_80178464;
|
|
|
|
extern f32 D_80178468;
|
|
|
|
extern f32 D_80178474;
|
|
|
|
extern f32 D_80178478;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
extern Gfx D_6000D80[];
|
|
|
|
extern Gfx D_600BAA0[];
|
|
|
|
extern Gfx D_60132A0[];
|
|
|
|
extern Gfx D_60132B0[];
|
|
|
|
extern Gfx D_6014A40[];
|
|
|
|
extern Gfx D_6020810[];
|
|
|
|
|
2024-03-14 16:31:03 -05:00
|
|
|
extern Animation D_AQ_6020A40;
|
2024-02-06 19:09:36 -03:00
|
|
|
extern Animation D_601F3B8;
|
2024-03-14 16:31:03 -05:00
|
|
|
extern Limb* D_AQ_6020C6C[];
|
2024-02-01 21:05:17 -06:00
|
|
|
extern Limb* D_602D140[];
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-03-06 17:33:08 -06:00
|
|
|
#include "assets/ast_allies.h"
|
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Vec3f D_800C9F60[] = {
|
|
|
|
{ 2000.0f, 2000.0f, 2000.0f },
|
|
|
|
{ -2000.0f, 2000.0f, 2000.0f },
|
|
|
|
{ 0.0f, -3000.0f, 3000.0f },
|
|
|
|
{ 5000.0f, -3000.0f, -3000.0f },
|
|
|
|
};
|
|
|
|
|
|
|
|
f32 D_800C9F90[] = { 75.0f, -80.0f, 85.0f, 0.0f };
|
|
|
|
|
|
|
|
Vec3f D_800C9FA0[] = {
|
|
|
|
{ 200.0f, -10.0f, 200.0f },
|
|
|
|
{ -200.0f, 20.0f, 200.0f },
|
|
|
|
{ 0.0f, 50.0f, 400.0f },
|
|
|
|
{ -2000.0f, -1000.0f, 0.0f },
|
|
|
|
};
|
|
|
|
|
|
|
|
f32 D_800C9FD0[] = { -1200.0f, 1200.0f, 0.0f, 0.0f };
|
|
|
|
|
|
|
|
f32 D_800C9FE0[] = { 0.0f, 0.0f, 600.0f, 2000.0f };
|
|
|
|
|
|
|
|
f32 D_800C9FF0[] = { -100.0f, 0.0f, 100.0f, 500.0f };
|
|
|
|
|
|
|
|
f32 D_800CA000[] = { -150.0f, 150.0f, 0.0f, 0.0f };
|
|
|
|
|
|
|
|
f32 D_800CA010[] = { 0.0f, 0.0f, 80.0f, 1000.0f };
|
|
|
|
|
|
|
|
f32 D_800CA020[] = { 45.0f, -45.0f, 10.0f, 0.0f };
|
|
|
|
|
|
|
|
s32 D_800CA030[] = { 0, 0, 0, 1 };
|
|
|
|
|
|
|
|
s32 D_800CA040[] = { 0, 0, 0, 0 };
|
|
|
|
|
|
|
|
f32 D_800CA050[] = { 210.0f, -210.0f, 0.0f };
|
|
|
|
|
|
|
|
f32 D_800CA05C[] = { -60.0f, -60.0f, -120.0f };
|
|
|
|
|
|
|
|
f32 D_800CA068[] = { -150.0f, -150.0f, -300.0f };
|
|
|
|
|
|
|
|
f32 D_800CA074[] = { 360.0f, -360.0f, 0.0f };
|
|
|
|
|
|
|
|
f32 D_800CA080[] = { -400.0f, 0.0f, 400.0f };
|
|
|
|
|
|
|
|
f32 D_800CA08C[] = { 0.0f, 200.0f, 0.0f };
|
|
|
|
|
2024-01-28 15:27:23 -06:00
|
|
|
f32 D_800CA098[] = { 1.0f, -0.9f, 0.7f };
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
f32 D_800CA0A4[] = { 150.0f, 100.0f, 200.0f };
|
|
|
|
|
|
|
|
f32 D_800CA0B0[] = { 200.0f, 300.0f, 500.0f };
|
|
|
|
|
|
|
|
Vec3f D_800CA0BC[] = {
|
|
|
|
{ -1373.0, 484.0, -374.0 },
|
|
|
|
{ 1373.0, 484.0, -374.0 },
|
|
|
|
{ -1373.0, -704.0, -374.0 },
|
|
|
|
{ 1373.0, -704.0, -374.0 },
|
|
|
|
};
|
|
|
|
|
|
|
|
Vec3f D_800CA0EC[] = {
|
|
|
|
{ 0.0, 40.0, -2278.0 },
|
|
|
|
{ 295.0, -92.0, -1301.0 },
|
|
|
|
{ -295.0, -92.0, -1301.0 },
|
|
|
|
};
|
|
|
|
|
|
|
|
Vec3f D_800CA110[8] = {
|
|
|
|
{ 170.0f, -35.0f, -380.0f }, { -170.0f, -40.0f, -380.0f }, { 170.0f, -130.0f, -380.0f },
|
|
|
|
{ -170.0f, -140.0f, -380.0f }, { 140.0f, 40.0f, -250.0f }, { -150.0f, 40.0f, -250.0f },
|
|
|
|
{ 140.0f, 0.0f, -250.0f }, { -150.0f, 0.0f, -250.0f },
|
|
|
|
};
|
|
|
|
|
|
|
|
f32 D_800CA170[] = {
|
2024-01-28 15:27:23 -06:00
|
|
|
0.15f, 0.45f, 0.75f, 1.3f, 0.75f, 0.45f, 0.15f, 0.0f,
|
2024-01-05 13:19:25 -06:00
|
|
|
};
|
|
|
|
|
2024-01-28 15:27:23 -06:00
|
|
|
f32 D_800CA190[] = { 5.0f, 5.2f };
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
f32 D_800CA198[] = {
|
2024-01-28 15:27:23 -06:00
|
|
|
0.5f, 1.5f, 2.5f, 1.5f, 0.5f, 0.2f, 0.2f,
|
2024-01-05 13:19:25 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
f32 D_800CA1B4[] = {
|
|
|
|
-30.0f, -60.0f, -90.0f, -120.0f, -150.0f, -180.0f, -200.0, -210.0,
|
|
|
|
};
|
|
|
|
|
|
|
|
f32 D_800CA1D4[] = {
|
2024-01-28 15:27:23 -06:00
|
|
|
1.5f, 0.87f, 0.83f, 0.75f, 0.7f, 0.6f, 0.4f, 0.1f,
|
2024-01-05 13:19:25 -06:00
|
|
|
};
|
|
|
|
|
2024-02-01 21:05:17 -06:00
|
|
|
Animation* D_800CA1F4[] = {
|
2024-02-16 18:58:59 -06:00
|
|
|
&D_60265B4, &D_602B8DC, &D_60034C4, &D_602A2CC, &D_602CEB4, &D_602B778, &D_601F3B8,
|
2024-01-05 13:19:25 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
void func_80048AC0(s32 teamId) {
|
|
|
|
s32 teamShield;
|
|
|
|
|
|
|
|
if (teamId == 1) {
|
|
|
|
if (gTeamShields[1] < 0x40) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20303, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ((s32) (Play_GetMaxShields() * 0.8f) < gPlayer[0].shields) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20017, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ((s32) (Play_GetMaxShields() * 0.3f) < gPlayer[0].shields) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20019, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
return;
|
|
|
|
}
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20018, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
teamShield = gTeamShields[teamId];
|
|
|
|
|
2024-01-05 17:28:02 -03:00
|
|
|
if (teamShield > 160) {
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (teamId) {
|
|
|
|
case 2:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20011, RCID_SLIPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
case 3:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20012, RCID_PEPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
} else if (teamShield > 64) {
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (teamId) {
|
|
|
|
case 2:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20013, RCID_SLIPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
case 3:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20014, RCID_PEPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch (teamId) {
|
|
|
|
case 2:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20015, RCID_SLIPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
case 3:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20016, RCID_PEPPY);
|
2024-01-05 17:28:02 -03:00
|
|
|
break;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_80048CC4(Actor* actor, s32 arg1) {
|
|
|
|
Actor_Initialize(actor);
|
2024-01-21 14:42:06 -06:00
|
|
|
actor->obj.status = OBJ_INIT;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.id = OBJ_ACTOR_195;
|
|
|
|
actor->obj.pos.x = D_800C9F60[arg1].x + gPlayer[0].pos.x;
|
|
|
|
actor->obj.pos.y = D_800C9F60[arg1].y + gPlayer[0].pos.y;
|
|
|
|
actor->obj.pos.z = D_800C9F60[arg1].z + gPlayer[0].unk_138;
|
|
|
|
actor->unk_0F4.y = 0.0f;
|
|
|
|
actor->unk_0F4.z = D_800C9F90[arg1];
|
|
|
|
Object_SetInfo(&actor->info, actor->obj.id);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (arg1 == 3) {
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x11030010U, actor->sfxSource, 0);
|
|
|
|
AUDIO_PLAY_SFX(0x31024059U, actor->sfxSource, 0);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->unk_0B6 = 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 1;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x3100000CU, actor->sfxSource, 4U);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80048E40(Player* player) {
|
|
|
|
Vec3f sp5C;
|
|
|
|
Vec3f sp50;
|
2024-01-05 17:28:02 -03:00
|
|
|
s32 pad[2];
|
2024-01-05 13:19:25 -06:00
|
|
|
f32 temp_ft3;
|
|
|
|
f32 temp_ret;
|
|
|
|
s32 temp_v1;
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
gBosses[1].obj.status = OBJ_FREE;
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_110, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
|
|
|
|
switch (player->unk_1D0) {
|
|
|
|
case 0:
|
|
|
|
player->unk_4DC = 0;
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_StopSfxByBankAndSource(1, player->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_1D0++;
|
|
|
|
D_80177A48[0] = 0.0f;
|
|
|
|
D_80177A48[1] = 0.0f;
|
|
|
|
D_80177A48[2] = 0.0f;
|
|
|
|
player->wings.unk_2C = 1;
|
2024-01-21 14:42:06 -06:00
|
|
|
gCsFrameCount = 0;
|
2024-01-05 13:19:25 -06:00
|
|
|
/* fallthrough */
|
|
|
|
case 1:
|
|
|
|
D_80177A48[1] -= D_80177A48[2];
|
|
|
|
Math_SmoothStepToF(&D_80177A48[2], 1.2f, 0.1f, 0.01f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&D_80177A48[0], 0.1f, 0.1f, 0.002f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0D0, 0.0f, 1.0f, 0.5f, 0.0f);
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_RotateX(gCalcMatrix, -5.0f * M_DTOR, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, D_80177A48[1] * M_DTOR, 1);
|
|
|
|
sp5C.x = 0.0f;
|
|
|
|
sp5C.y = 0.0f;
|
|
|
|
sp5C.z = 300.0f;
|
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp5C, &sp50);
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamAtX = player->pos.x;
|
|
|
|
gCsCamAtY = player->pos.y;
|
|
|
|
gCsCamAtZ = player->unk_138 + D_80177D20;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
switch (gCsFrameCount) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 101:
|
|
|
|
if (gTeamShields[1] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80048CC4(&gActors[0], 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
if (gTeamShields[2] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80048CC4(&gActors[1], 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
if (gTeamShields[3] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80048CC4(&gActors[2], 2);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 100:
|
|
|
|
D_80177840 = 0x64;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 200:
|
|
|
|
D_80177830 = 1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 400:
|
|
|
|
D_80177830 = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 420:
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[0].state = 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 430:
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[1].state = 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 440:
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[2].state = 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 450:
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, player->sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_194 = 5.0f;
|
|
|
|
player->unk_190 = 5.0f;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount >= 0x1C3) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&D_80177A48[0], 1.0f, 0.1f, 0.004f, 0.0f);
|
|
|
|
player->unk_0D0 += 2.0f;
|
|
|
|
player->unk_0E4 += 0.1f;
|
|
|
|
player->unk_190 = 2.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 530) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_FadeOutAll(50);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount > 540) {
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178358 = 255;
|
|
|
|
D_80178348 = (D_80178350 = (D_80178354 = 0));
|
|
|
|
D_8017835C = 8;
|
|
|
|
if (D_80178340 == 255) {
|
|
|
|
player->state_1C8 = PLAYERSTATE_1C8_6;
|
|
|
|
player->timer_1F8 = 0;
|
|
|
|
D_8017837C = 4;
|
|
|
|
if (gCurrentLevel == LEVEL_METEO) {
|
2024-01-13 19:09:13 -06:00
|
|
|
D_800D3180[LEVEL_METEO] = Play_CheckMedalStatus(200) + 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-13 19:09:13 -06:00
|
|
|
D_800D3180[LEVEL_SECTOR_X] = Play_CheckMedalStatus(150) + 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
D_80177930 = 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamEyeX = player->pos.x + sp50.x;
|
|
|
|
gCsCamEyeY = player->pos.y + sp50.y;
|
|
|
|
gCsCamEyeZ = player->unk_138 + D_80177D20 + sp50.z;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-02-19 07:05:11 -06:00
|
|
|
Math_SmoothStepToF(&player->camEye.x, gCsCamEyeX, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, gCsCamEyeY, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camEye.z, gCsCamEyeZ, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camAt.x, gCsCamAtX, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camAt.y, gCsCamAtY, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camAt.z, gCsCamAtZ, D_80177A48[0], 50000.0f, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
|
|
|
|
|
|
|
|
sp5C.x = 0.0f;
|
|
|
|
sp5C.y = 0.0f;
|
|
|
|
sp5C.z = player->unk_0D0 + player->unk_110;
|
|
|
|
|
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp5C, &sp50);
|
|
|
|
player->vel.x = sp50.x;
|
|
|
|
player->vel.z = sp50.z;
|
|
|
|
player->vel.y = sp50.y;
|
|
|
|
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
|
|
|
player->pos.z += player->vel.z;
|
|
|
|
|
|
|
|
player->unk_138 = player->pos.z + player->unk_08C;
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
|
|
|
player->unk_088 += 10.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_080 = (-SIN_DEG(player->unk_088)) * 0.3f;
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_0F4 += 8.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_0F0 = SIN_DEG(player->unk_0F4);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_80049630(Actor* actor) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Vec3f sp3C;
|
|
|
|
Vec3f sp30;
|
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vwork[0].x = gPlayer[0].pos.x + D_800C9FA0[actor->index].x;
|
|
|
|
actor->vwork[0].y = gPlayer[0].pos.y + D_800C9FA0[actor->index].y;
|
|
|
|
actor->vwork[0].z = gPlayer[0].pos.z + D_800C9FA0[actor->index].z;
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.x, actor->vwork[0].x, 0.05f, 50.0f, 0.0001f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.y, actor->vwork[0].y, 0.05f, 50.0f, 0.0001f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.z, actor->vwork[0].z, 0.05f, 50.0f, 0.0001f);
|
|
|
|
Math_SmoothStepToF(&actor->unk_0F4.x, gPlayer[0].unk_0E4, 0.1f, 2.0f, 0.0001f);
|
|
|
|
Math_SmoothStepToF(&actor->unk_0F4.y, gPlayer[0].unk_0E8, 0.1f, 2.0f, 0.0001f);
|
|
|
|
Math_SmoothStepToF(&actor->unk_0F4.z, 0.0f, 0.05f, 0.2f, 0.0001f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = 2;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, actor->sfxSource, 0);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 0x96;
|
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
case 2:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
actor->fwork[0] += 2.0f;
|
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_RotateY(gCalcMatrix, (actor->unk_0F4.y + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(actor->unk_0F4.x * M_DTOR), 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp3C.x = 0.0f;
|
|
|
|
sp3C.y = 0.0f;
|
2024-01-13 22:45:37 +00:00
|
|
|
sp3C.z = actor->fwork[0];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp3C, &sp30);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x = sp30.x;
|
|
|
|
actor->vel.y = sp30.y;
|
|
|
|
actor->vel.z = sp30.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.x = -actor->unk_0F4.x;
|
|
|
|
actor->obj.rot.y = actor->unk_0F4.y + 180.0f;
|
|
|
|
actor->obj.rot.z = -actor->unk_0F4.z;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004990C(Player* player) {
|
|
|
|
if (D_801784AC == 0) {
|
|
|
|
D_80177CE8 += 60.0f;
|
|
|
|
}
|
|
|
|
player->unk_138 = player->pos.z + player->unk_08C;
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_80049968(Actor* actor, s32 arg1) {
|
|
|
|
Actor_Initialize(actor);
|
2024-01-21 14:42:06 -06:00
|
|
|
actor->obj.status = OBJ_INIT;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.id = OBJ_ACTOR_195;
|
|
|
|
actor->obj.pos.x = D_800C9FD0[arg1];
|
|
|
|
actor->obj.pos.y = D_800C9FE0[arg1];
|
|
|
|
actor->obj.pos.z = D_800C9FF0[arg1] + ((void) 0, gPlayer)[0].unk_138;
|
|
|
|
actor->fwork[0] = D_800CA000[arg1];
|
|
|
|
actor->fwork[1] = D_800CA010[arg1];
|
|
|
|
actor->unk_0B6 = D_800CA030[arg1];
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = D_800CA040[arg1];
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.z = D_800CA020[arg1];
|
|
|
|
actor->obj.rot.y = 180.0f;
|
|
|
|
actor->vel.z = gPlayer[0].vel.z;
|
|
|
|
Object_SetInfo(&actor->info, actor->obj.id);
|
|
|
|
actor->iwork[11] = 1;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x3100000CU, actor->sfxSource, 4U);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 08:43:04 -05:00
|
|
|
void func_80049A9C(Effect* effect, f32 x, f32 y, f32 z) {
|
|
|
|
Effect_Initialize(effect);
|
2024-01-21 14:42:06 -06:00
|
|
|
effect->obj.status = OBJ_INIT;
|
2024-01-13 08:43:04 -05:00
|
|
|
effect->obj.id = OBJ_EFFECT_346;
|
|
|
|
effect->timer_50 = 100;
|
|
|
|
effect->scale2 = 0.2f;
|
|
|
|
effect->obj.pos.x = x;
|
|
|
|
effect->obj.pos.y = y;
|
|
|
|
effect->obj.pos.z = z;
|
|
|
|
effect->vel.z = 40.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
effect->obj.rot.z = RAND_FLOAT(360.0f);
|
2024-01-13 08:43:04 -05:00
|
|
|
Object_SetInfo(&effect->info, effect->obj.id);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_80049B44(void) {
|
|
|
|
s32 i;
|
|
|
|
f32 x;
|
|
|
|
f32 y;
|
|
|
|
f32 z;
|
|
|
|
|
2024-01-13 08:43:04 -05:00
|
|
|
for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gEffects[i].obj.status == OBJ_FREE) {
|
2024-01-28 15:27:23 -06:00
|
|
|
x = RAND_FLOAT_CENTERED(400.0f);
|
|
|
|
y = RAND_FLOAT_CENTERED(400.0f);
|
|
|
|
z = -D_80177D20 - 500.0f - RAND_FLOAT(500.0f);
|
2024-01-13 08:43:04 -05:00
|
|
|
func_80049A9C(&gEffects[i], x, y, z);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80049C0C(Player* player) {
|
|
|
|
s32 var_v0;
|
|
|
|
s32 pad[4];
|
|
|
|
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->unk_228 = 0;
|
|
|
|
player->unk_238 = 0;
|
|
|
|
player->pos.y += player->vel.y;
|
|
|
|
player->pos.z += player->vel.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
func_8004990C(player);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_140 = -player->vel.z;
|
|
|
|
player->unk_144 += -player->vel.z;
|
|
|
|
D_80177D20 = player->unk_144;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->pos.x, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->pos.y, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camEye.x, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.x, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.y, 0.0f, 0.1f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->unk_1D0) {
|
|
|
|
case 0:
|
|
|
|
player->unk_4DC = 0;
|
|
|
|
D_80178414 = 100.0f;
|
|
|
|
player->unk_1D0 = 1;
|
|
|
|
D_80178410 = 1;
|
|
|
|
D_80178488 = 0;
|
|
|
|
player->vel.x = 0.0f;
|
|
|
|
player->vel.y = 0.0f;
|
|
|
|
player->vel.z = -500.0f;
|
|
|
|
player->unk_0CC = -500.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gTeamShields[1] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049968(&gActors[0], 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
if (gTeamShields[2] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049968(&gActors[1], 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
if (gTeamShields[3] > 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049968(&gActors[2], 2);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049968(&gActors[3], 3);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->timer_1F8 = 0x32;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
Math_SmoothStepToF(&D_801779A8[player->num], 100.0f, 1.0f, 4.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
D_80178414 *= 1.05f;
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_1D0 = 2;
|
|
|
|
player->timer_1F8 = 0x96;
|
|
|
|
}
|
|
|
|
player->unk_190 = 2.0f;
|
|
|
|
player->unk_08C -= 2.0f;
|
|
|
|
gBlurAlpha = 128;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
Math_SmoothStepToF(&D_801779A8[player->num], 100.0f, 1.0f, 3.0f, 0.0f);
|
|
|
|
if (D_80178414 < 20000.0f) {
|
|
|
|
D_80178414 *= 1.01f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 <= 100) {
|
|
|
|
if (player->timer_1F8 == 100) {
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A6028(player->sfxSource, 0x0940802AU);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_194 = 5.0f;
|
|
|
|
player->unk_190 = 5.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_08C += player->unk_0CC;
|
|
|
|
player->unk_0CC = player->unk_0CC - 100.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_08C < -15000.0f) {
|
|
|
|
player->unk_08C = 0.0f;
|
|
|
|
player->unk_0CC = 0.0f;
|
|
|
|
player->unk_234 = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var_v0 = 1;
|
|
|
|
player->unk_190 = 2.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if ((player->timer_1F8 == 0x5F) && (gTeamShields[1] > 0)) {
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[0].state = var_v0;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x0940802AU, gActors[0].sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if ((player->timer_1F8 == 0x5A) && (gTeamShields[3] > 0)) {
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[2].state = var_v0;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x0940802AU, gActors[2].sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if ((player->timer_1F8 == 85) && (gTeamShields[2] > 0)) {
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[1].state = var_v0;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x0940802AU, gActors[1].sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 == 60) {
|
2024-01-24 08:45:55 -06:00
|
|
|
gActors[3].state = var_v0;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x0940802AU, gActors[3].sfxSource, 0);
|
|
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 50);
|
|
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 50);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 == 50) {
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_1D0 = 4;
|
|
|
|
player->timer_1F8 = 0;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
Math_SmoothStepToF(&D_801779A8[player->num], 100.0f, 1.0f, 3.0f, 0.0f);
|
|
|
|
player->unk_034 -= 0.5f;
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
D_80178348 = D_80178350 = D_80178354 = 255;
|
|
|
|
D_80178358 = 255;
|
|
|
|
D_8017835C = 8;
|
|
|
|
if (D_80178340 == 255) {
|
|
|
|
func_800A6148();
|
|
|
|
player->unk_1D0 = 5;
|
|
|
|
player->timer_1F8 = 0xA;
|
|
|
|
player->unk_08C = -10000.0f;
|
|
|
|
player->unk_0AC = player->unk_0B8 = player->unk_0B0 = player->unk_0BC = player->pos.x =
|
|
|
|
player->pos.y = player->pos.z = player->unk_130 = player->unk_034 = player->unk_138 =
|
|
|
|
player->vel.z = player->unk_144 = D_80177D20 = player->unk_144 = D_80177CB0 = D_80177D20 =
|
|
|
|
0.0f;
|
|
|
|
|
|
|
|
player->timer_27C = gSavedHitCount = D_80177DC8 = D_80177CA0 = 0;
|
|
|
|
|
|
|
|
player->unk_234 = 1;
|
|
|
|
D_8017827C = 1;
|
|
|
|
D_800CA230 = 0.15f;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x11407079U, gDefaultSfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AB334();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
Math_SmoothStepToF(&D_801779A8[player->num], 100.0f, 1.0f, 3.0f, 0.0f);
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
D_80178358 = 0;
|
|
|
|
D_8017835C = 8;
|
|
|
|
if (D_80178340 == 0) {
|
|
|
|
player->unk_1D0 = 6;
|
2024-01-05 17:28:02 -03:00
|
|
|
player->timer_1F8 = 50;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 6:
|
|
|
|
Math_SmoothStepToF(&D_80178414, 0.0f, 0.2f, 1000.0f, 0.1f);
|
|
|
|
Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.2f, 500.0f, 0.1f);
|
|
|
|
if (player->timer_1F8 < 0x1E) {
|
|
|
|
for (var_v0 = 0; var_v0 < 3; var_v0++) {
|
|
|
|
func_80049B44();
|
|
|
|
}
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 == 30) {
|
2024-03-01 12:57:44 -06:00
|
|
|
D_80178410 = 300;
|
|
|
|
AUDIO_PLAY_BGM(SEQ_ID_58 | 0x8000);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
D_8015F960 = 0.0f;
|
|
|
|
D_80178414 = 0.0f;
|
|
|
|
player->state_1C8 = 3;
|
|
|
|
player->unk_014 = 0.0f;
|
|
|
|
player->unk_018 = 0.0f;
|
|
|
|
D_801782B8 = 0;
|
|
|
|
D_80178488 = 1;
|
|
|
|
}
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, (player->pos.y * player->unk_148) + 50.0f, 0.2f, 15.0f, 0.01f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.y, (player->pos.y * player->unk_14C) + 20.0f, 0.2f, 15.0f, 0.01f);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004A52C(Player* player) {
|
2024-01-21 14:42:06 -06:00
|
|
|
gCsFrameCount += 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gLevelMode == LEVELMODE_ON_RAILS) {
|
|
|
|
switch (gCurrentLevel) {
|
|
|
|
case LEVEL_CORNERIA:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i1_8018F880(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_METEO:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i2_8018CD8C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_SECTOR_X:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i2_80193A30(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_TITANIA:
|
2024-01-14 01:30:21 -03:00
|
|
|
func_i5_8018769C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_ZONESS:
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_8019D428(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_MACBETH:
|
2024-01-14 01:30:21 -03:00
|
|
|
func_i5_801AC754(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_SECTOR_Y:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_801A0AC0(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_SOLAR:
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_801A10F4(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_VENOM_1:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i1_801988B8(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_AQUAS:
|
|
|
|
func_800935E8(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_AREA_6:
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_8018DF74(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
func_8004990C(player);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
switch (gCurrentLevel) {
|
|
|
|
case LEVEL_FORTUNA:
|
|
|
|
func_8002ED60(player);
|
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_VENOM_2:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_80196BF8(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_BOLSE:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_8018EF6C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_KATINA:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_80192E20(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_SECTOR_Z:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_8019BA64(player);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004A700(Actor* actor, s32 arg1) {
|
|
|
|
Actor_Initialize(actor);
|
2024-01-21 14:42:06 -06:00
|
|
|
actor->obj.status = OBJ_INIT;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.id = OBJ_ACTOR_195;
|
|
|
|
actor->obj.pos.x = gPlayer[0].pos.x;
|
|
|
|
actor->obj.pos.y = gPlayer[0].pos.y - 1000.0f;
|
|
|
|
actor->obj.pos.z = gPlayer[0].pos.z;
|
|
|
|
actor->fwork[0] = D_800CA050[arg1];
|
|
|
|
actor->fwork[1] = D_800CA05C[arg1];
|
|
|
|
actor->fwork[2] = D_800CA068[arg1];
|
|
|
|
actor->fwork[3] = 4.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
actor->fwork[7] = RAND_FLOAT(100.0f);
|
|
|
|
actor->fwork[8] = RAND_FLOAT(100.0f);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.z = D_800CA074[arg1];
|
|
|
|
actor->iwork[11] = 1;
|
|
|
|
Object_SetInfo(&actor->info, actor->obj.id);
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x3100000CU, actor->sfxSource, 4U);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004A840(s32 actor) {
|
|
|
|
func_8004A700(&gActors[actor], actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 08:43:04 -05:00
|
|
|
void func_8004A888(Effect* effect) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Vec3f sp2C;
|
|
|
|
Vec3f sp20;
|
|
|
|
|
|
|
|
Matrix_RotateY(gCalcMatrix, (gPlayer[0].unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(gPlayer[0].unk_0E4 * M_DTOR), 1);
|
2024-01-13 08:43:04 -05:00
|
|
|
Effect_Initialize(effect);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
effect->obj.status = OBJ_INIT;
|
2024-01-28 15:27:23 -06:00
|
|
|
sp2C.x = RAND_FLOAT_CENTERED(1500.0f);
|
|
|
|
sp2C.y = RAND_FLOAT_CENTERED(800.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
sp2C.z = 3000.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp2C, &sp20);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 08:43:04 -05:00
|
|
|
effect->obj.pos.x = gPlayer[0].pos.x + sp20.x;
|
|
|
|
effect->obj.pos.y = gPlayer[0].pos.y + sp20.y;
|
|
|
|
effect->obj.pos.z = gPlayer[0].pos.z + sp20.z;
|
2024-01-05 13:19:25 -06:00
|
|
|
sp2C.x = 0.0f;
|
|
|
|
sp2C.y = 0.0f;
|
|
|
|
sp2C.z = -80.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp2C, &sp20);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 08:43:04 -05:00
|
|
|
effect->vel.x = sp20.x;
|
|
|
|
effect->vel.y = sp20.y;
|
|
|
|
effect->vel.z = sp20.z;
|
|
|
|
effect->obj.id = OBJ_EFFECT_352;
|
|
|
|
effect->timer_50 = 0x28;
|
|
|
|
effect->unk_46 = 0x90;
|
2024-01-28 15:27:23 -06:00
|
|
|
effect->scale2 = RAND_FLOAT(30.0f) + 10.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (Rand_ZeroOne() < 0.5f) {
|
2024-01-13 08:43:04 -05:00
|
|
|
effect->obj.rot.z = 180.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-13 08:43:04 -05:00
|
|
|
Object_SetInfo(&effect->info, effect->obj.id);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004AA84(void) {
|
|
|
|
s32 i;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
if (!(gGameFrameCount & 7) && (gLevelType == LEVEL_CORNERIA)) {
|
2024-01-13 08:43:04 -05:00
|
|
|
for (i = 0; i < ARRAY_COUNT(gEffects); i++) {
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gEffects[i].obj.status == OBJ_FREE) {
|
2024-01-13 08:43:04 -05:00
|
|
|
func_8004A888(&gEffects[i]);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004AAF4(Player* player) {
|
|
|
|
s32 pad;
|
|
|
|
Vec3f sp70;
|
|
|
|
Vec3f sp64;
|
2024-01-21 14:42:06 -06:00
|
|
|
Actor* actor;
|
2024-01-05 13:19:25 -06:00
|
|
|
f32 var_s1;
|
|
|
|
f32 var_s2;
|
|
|
|
f32 var_s3;
|
|
|
|
s32 i;
|
|
|
|
s32 pad1;
|
|
|
|
s32 pad2;
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
gCsFrameCount += 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 20.0f, 0.0f);
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 37) {
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80177E84 = 1;
|
|
|
|
if (gCurrentLevel == LEVEL_VENOM_ANDROSS) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_19466, RCID_FOX);
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_BGM(SEQ_ID_61 | 0x8000);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else if (gCurrentLevel != LEVEL_TRAINING) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20180, RCID_FOX);
|
2024-01-13 19:09:13 -06:00
|
|
|
if (gCurrentLevel == LEVEL_SECTOR_Y) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_PlaySequence(SEQ_PLAYER_BGM, D_800C9E90[gCurrentLevel], 0, 2);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_BGM(D_800C9E90[gCurrentLevel]);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
player->wings.unk_10 = 0.0f;
|
|
|
|
player->wings.unk_08 = 0.0f;
|
|
|
|
player->wings.unk_0C = 0.0f;
|
|
|
|
player->wings.unk_04 = 0.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 1.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_110, 0.0f, 0.1f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 3.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->unk_1D0) {
|
|
|
|
case 0:
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_PlayVoice(0);
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80177A48[0] = 0.005f;
|
|
|
|
D_80177A48[1] = 0.0f;
|
|
|
|
D_80177A48[2] = 60.0f;
|
|
|
|
D_80177A48[3] = 0.0f;
|
|
|
|
player->wings.unk_2C = 1;
|
|
|
|
player->unk_1D0++;
|
2024-01-21 14:42:06 -06:00
|
|
|
gCsFrameCount = 0;
|
2024-01-05 13:19:25 -06:00
|
|
|
/* fallthrough */
|
|
|
|
case 1:
|
|
|
|
if (player->pos.y < 350.0f) {
|
|
|
|
Math_SmoothStepToF(&player->pos.y, 350.0f, 0.1f, D_80177A48[3], 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&D_80177A48[3], 10.0f, 1.0f, 1.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&D_80177A48[1], 360.0f, 0.05f, 1.5f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&D_80177A48[2], -70.0f, 0.1f, 0.7f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (D_80177A48[1] > 220.0f) {
|
|
|
|
player->unk_204 = 2;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if ((gCsFrameCount >= 0x88) && (gCsFrameCount < 0xB4)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&D_801779A8[player->num], 30.0f, 1.0f, 10.0f, 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 0x8A) {
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000007U, player->sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 0xBE) {
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000013U, player->sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (D_80177A48[1] > 350.0f) {
|
|
|
|
player->state_1C8 = PLAYERSTATE_1C8_3;
|
|
|
|
player->unk_014 = 0.0f;
|
|
|
|
player->unk_018 = 0.1f;
|
|
|
|
player->unk_194 = 10.0f;
|
|
|
|
player->unk_190 = 10.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, player->sfxSource, 0);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
D_801779A8[player->num] = 70.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 19:09:13 -06:00
|
|
|
if ((gCurrentLevel != LEVEL_VENOM_ANDROSS) && (gCurrentLevel != LEVEL_TRAINING)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
D_800D1970 = 0;
|
2024-01-21 14:42:06 -06:00
|
|
|
for (i = 0, actor = &gActors[2]; i < 3; i++, actor++) {
|
|
|
|
Actor_Initialize(actor);
|
|
|
|
actor->obj.status = OBJ_INIT;
|
|
|
|
actor->obj.id = OBJ_ACTOR_198;
|
|
|
|
actor->obj.pos.x = D_800CA080[i] + player->pos.x;
|
|
|
|
actor->obj.pos.y = D_800CA08C[i] + player->pos.y;
|
|
|
|
actor->obj.pos.z = player->unk_138 - 1000.0f;
|
|
|
|
actor->unk_0F4.y = 180.0f;
|
|
|
|
Object_SetInfo(&actor->info, actor->obj.id);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, D_80177A48[1] * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, D_80177A48[2] * M_DTOR, 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp70.x = 0.0f;
|
|
|
|
sp70.y = 0.0f;
|
|
|
|
sp70.z = 200.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp70, &sp64);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gCurrentLevel == LEVEL_CORNERIA) || (gCurrentLevel == LEVEL_VENOM_ANDROSS)) {
|
|
|
|
sp64.x *= -1.0f;
|
|
|
|
}
|
|
|
|
Math_SmoothStepToF(&D_80177A48[0], 0.1f, 1.0f, 0.005f, 0.0f);
|
2024-02-19 07:05:11 -06:00
|
|
|
Math_SmoothStepToF(&player->camEye.x, player->pos.x + sp64.x, D_80177A48[0], 500.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, player->pos.y + sp64.y, D_80177A48[0], 500.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camEye.z, player->unk_138 + D_80177D20 + sp64.z, D_80177A48[0], 500.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.x, player->pos.x, D_80177A48[0], 500.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.y, player->pos.y, D_80177A48[0], 500.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.z, player->unk_138 + D_80177D20, D_80177A48[0], 500.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(player->unk_0E4 * M_DTOR), 1);
|
|
|
|
|
|
|
|
sp70.x = 0.0f;
|
|
|
|
sp70.y = 0.0f;
|
|
|
|
sp70.z = player->unk_0D0 + player->unk_110;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp70, &sp64);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.x = sp64.x;
|
|
|
|
player->vel.z = sp64.z;
|
|
|
|
player->vel.y = sp64.y;
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
|
|
|
player->pos.z += player->vel.z;
|
|
|
|
player->unk_138 = player->pos.z + player->unk_08C;
|
|
|
|
player->camAt.z += player->vel.z;
|
|
|
|
player->camEye.z += player->vel.z;
|
|
|
|
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
|
|
|
player->unk_088 += 10.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_080 = -SIN_DEG(player->unk_088) * 0.3f;
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_0F4 += 8.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_0F0 = SIN_DEG(player->unk_0F4);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
func_800AA800(player);
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004B368(Player* player) {
|
|
|
|
s32 pad[5];
|
|
|
|
Vec3f sp78;
|
|
|
|
Vec3f sp6C;
|
|
|
|
Vec3f sp60;
|
|
|
|
Vec3f sp54;
|
|
|
|
s32 pad2[2];
|
|
|
|
f32 var_fa1;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_228 = 0;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.1f, 5.0f, 0.01f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->unk_1D0) {
|
|
|
|
case 10:
|
|
|
|
D_80177A48[2] = 0.0f;
|
|
|
|
player->unk_1D0++;
|
|
|
|
player->wings.unk_04 = 0.0f;
|
|
|
|
player->wings.unk_0C = 0.0f;
|
|
|
|
player->wings.unk_08 = 0.0f;
|
|
|
|
player->wings.unk_10 = 0.0f;
|
|
|
|
player->unk_130 = 0.0f;
|
|
|
|
player->unk_12C = 0.0f;
|
|
|
|
player->unk_110 = 0.0f;
|
|
|
|
player->wings.unk_2C = 1;
|
|
|
|
player->unk_0D0 = 40.0f;
|
|
|
|
/* fallthrough */
|
|
|
|
|
|
|
|
case 11:
|
|
|
|
D_80177A48[0] = 0.0f;
|
|
|
|
Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 1.0f, 5.0f, 0.0f);
|
|
|
|
player->camAt.x += (D_80178440 - player->camAt.x) * 0.01f;
|
|
|
|
player->camAt.y += (D_80178444 - player->camAt.y) * 0.01f;
|
|
|
|
player->camAt.z += (D_80178448 - player->camAt.z) * 0.01f;
|
|
|
|
player->camEye.x += ((player->camAt.x + (500.0f * player->unk_004)) - player->camEye.x) * 0.01f;
|
|
|
|
player->camEye.y += ((player->camAt.y + 500.0f) - player->camEye.y) * 0.01f;
|
|
|
|
player->camEye.z += ((D_80178448 + (2000.0f * D_80177950)) - player->camEye.z) * 0.01f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1FC >= 0x1A) {
|
|
|
|
D_80177A48[2] += 1.5f * player->unk_004;
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, (player->unk_004 * (-450.0f)) * D_80177950, 0.2f, 20.0f, 0.1f);
|
|
|
|
} else {
|
|
|
|
D_80177A48[2] += 0.25f * player->unk_004;
|
|
|
|
if (player->unk_0EC < (-360.0f)) {
|
|
|
|
player->unk_0EC += 360.0f;
|
|
|
|
}
|
|
|
|
if (player->unk_0EC > 360.0f) {
|
|
|
|
player->unk_0EC -= 360.0f;
|
|
|
|
}
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, (player->unk_004 * 20.0f) * D_80177950, 0.1f, 3.0f, 0.1f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (D_80177950 > 0.0f) {
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 3.0f, 0.1f);
|
|
|
|
} else {
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 180.0f, 0.1f, 3.0f, 0.1f);
|
|
|
|
Math_SmoothStepToF(&player->pos.x, player->camEye.x, 1.0f, 30.0f, 0.0f);
|
|
|
|
D_80177A48[2] = 0.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->pos.x += D_80177A48[2];
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 3.0f, 0.1f);
|
|
|
|
Math_SmoothStepToF(&player->pos.y, player->camEye.y + 5.0f, 0.1f, 1.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_1D0 = 0;
|
|
|
|
player->timer_1F8 = 0x78;
|
|
|
|
player->timer_1FC = 0x14;
|
|
|
|
D_80177A48[0] = 0.001f;
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamEyeX = player->camEye.x;
|
|
|
|
gCsCamEyeY = player->camEye.y;
|
|
|
|
gCsCamEyeZ = player->camEye.z;
|
|
|
|
gCsCamAtX = player->camAt.x;
|
|
|
|
gCsCamAtY = player->camAt.y;
|
|
|
|
gCsCamAtZ = player->camAt.z;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 0:
|
2024-01-05 17:28:02 -03:00
|
|
|
if (player->timer_1F8 > 60) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_0EC, (player->unk_004 * 60.0f) * D_80177950, 0.1f, 4.0f, 0.1f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
if (player->timer_1F8 < 80) {
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamAtX = player->pos.x;
|
|
|
|
gCsCamAtY = player->pos.y;
|
|
|
|
gCsCamAtZ = player->unk_138 + D_80177D20 + 30.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&D_80177A48[0], 0.05f, 0.1f, 0.0005f, 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->pos.x, player->camEye.x, 0.1f, 10.0f, 0.0f);
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamEyeY += ((player->camAt.y + 500.0f) - player->camEye.y) * 0.01f;
|
|
|
|
player->camEye.y = gCsCamEyeY;
|
2024-01-05 13:19:25 -06:00
|
|
|
var_fa1 = player->unk_004 * 190.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((D_80177950 > 0.0f) && (player->unk_004 > 0.0f)) {
|
|
|
|
var_fa1 = 181.0f;
|
|
|
|
}
|
|
|
|
if ((D_80177950 > 0.0f) && (player->unk_004 < 0.0f)) {
|
|
|
|
var_fa1 = -181.0f;
|
|
|
|
}
|
|
|
|
if ((D_80177950 < 0.0f) && (player->unk_004 > 0.0f)) {
|
|
|
|
var_fa1 = 0.0f;
|
|
|
|
}
|
|
|
|
if ((D_80177950 < 0.0f) && (player->unk_004 < 0.0f)) {
|
|
|
|
var_fa1 = 360.0f;
|
|
|
|
}
|
|
|
|
if (player->timer_1FC == 0) {
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, var_fa1, 0.1f, 4.0f, 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.y = 0.0f;
|
|
|
|
Math_SmoothStepToF(&player->pos.y, player->camEye.y + 5.0f, 0.1f, 4.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 < 40) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->unk_0EC, player->unk_004 * 180.0f, 0.1f, 1.5f, 0.0f);
|
|
|
|
}
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_1D0 = 1;
|
|
|
|
player->timer_1F8 = 0x96;
|
|
|
|
player->wings.unk_10 = 0.0f;
|
|
|
|
player->wings.unk_08 = 0.0f;
|
|
|
|
player->wings.unk_0C = 0.0f;
|
|
|
|
player->wings.unk_04 = 0.0f;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
Math_SmoothStepToF(&D_80177A48[0], 1.0f, 0.1f, 0.05f, 0.0f);
|
|
|
|
player->unk_25C += 0.04f;
|
|
|
|
if (player->unk_25C > 0.6f) {
|
|
|
|
player->unk_25C = 0.6f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_000 += 0.005f;
|
|
|
|
if (player->unk_000 > 0.3f) {
|
|
|
|
player->unk_000 = 0.3f;
|
|
|
|
}
|
2024-02-19 07:05:11 -06:00
|
|
|
Math_SmoothStepToF(&gCsCamAtX, player->pos.x, D_80177A48[0], 50000.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&gCsCamAtY, player->pos.y, D_80177A48[0], 50000.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&gCsCamAtZ, player->unk_138 + D_80177D20 + 30.0f, D_80177A48[0], 50000.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->pos.y, player->camEye.y + 5.0f, 0.1f, 4.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 20.0f, 0.1f, 0.2f, 0.01f);
|
|
|
|
Math_SmoothStepToF(&player->pos.x, player->camEye.x, 0.1f, 2.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 < 0x6F) {
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, player->unk_004 * 360.0f, 0.1f, 2.5f, 0.0f);
|
|
|
|
} else {
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, player->unk_004 * 180.0f, 0.1f, 2.5f, 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((180.0f - fabsf(player->unk_0EC)) <= 3.0f) {
|
|
|
|
D_80161A88 = 1;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->timer_1F8 = 0xC8;
|
|
|
|
player->timer_1FC = 0x1F4;
|
|
|
|
player->unk_1D0 = 2;
|
|
|
|
player->unk_000 = (player->unk_004 = (player->unk_008 = (D_80178418 = 0.0f)));
|
|
|
|
player->unk_0D0 = 0.0f;
|
|
|
|
D_80177A48[6] = 0.0f;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
player->pos.y += 5.0f;
|
|
|
|
Matrix_RotateY(gCalcMatrix, ((player->unk_0E8 + 180.0f) + D_80178418) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(player->unk_0E4 * M_DTOR), 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, -((player->unk_0F8 + player->unk_0F0) * M_DTOR), 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp78.x = 0;
|
|
|
|
sp78.y = 70.0f;
|
|
|
|
sp78.z = -800.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C);
|
2024-02-19 07:05:11 -06:00
|
|
|
Math_SmoothStepToF(&gCsCamAtX, player->pos.x, D_80177A48[0], 50000.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&gCsCamAtY, player->pos.y - D_80177A48[6], D_80177A48[0], 50000.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&gCsCamAtZ, player->unk_138 + D_80177D20 - D_80177A48[6], D_80177A48[0], 50000.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&D_80177A48[6], 130.0f, 0.1f, 0.25f, 0.0f);
|
|
|
|
player->unk_000 += 0.002f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_000 > 0.3f) {
|
|
|
|
player->unk_000 = 0.3f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamEyeX += ((player->pos.x + sp6C.x) - gCsCamEyeX) * player->unk_000;
|
|
|
|
gCsCamEyeY += ((player->pos.y + sp6C.y) - gCsCamEyeY) * player->unk_000;
|
|
|
|
gCsCamEyeZ += ((player->unk_138 + D_80177D20 + sp6C.z) - gCsCamEyeZ) * player->unk_000;
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178430 += 0.2f;
|
|
|
|
D_8017842C += 0.2f;
|
|
|
|
D_80178418 += player->unk_008;
|
|
|
|
Math_SmoothStepToAngle(&player->unk_0EC, 0.0f, 0.1f, 2.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_008 += 0.01f;
|
|
|
|
if (player->unk_008 > 0.63f) {
|
|
|
|
player->unk_008 = 0.63f;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
player->unk_008 -= 0.0005f;
|
|
|
|
if (player->unk_008 < 0.0f) {
|
|
|
|
player->unk_008 = 0.0f;
|
|
|
|
}
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.y = 5.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if ((player->timer_1F8 == 50) && (gTeamShields[1] > 0)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
func_8004A840(0);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if ((player->timer_1F8 == 70) && (gTeamShields[2] > 0)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
func_8004A840(1);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
|
|
|
if (player->timer_1F8 == 90) {
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800A6148();
|
|
|
|
if (gTeamShields[3] > 0) {
|
|
|
|
func_8004A840(2);
|
|
|
|
}
|
|
|
|
D_80161A88 = 0;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(player->unk_0E4 * M_DTOR), 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, -((player->unk_0F8 + player->unk_0F0) * M_DTOR), 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((D_80178418 > 70.0f) && (D_80178418 < 280.0f)) {
|
|
|
|
func_8004AA84();
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
sp78.x = gActors[0].fwork[0] * gActors[0].fwork[3];
|
|
|
|
sp78.y = gActors[0].fwork[1] * gActors[0].fwork[3];
|
|
|
|
sp78.z = gActors[0].fwork[2] * gActors[0].fwork[3];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178450[0] = player->pos.x + sp6C.x;
|
|
|
|
D_80178460[0] = player->pos.y + sp6C.y;
|
|
|
|
D_80178470[0] = player->unk_138 + sp6C.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
sp78.x = gActors[1].fwork[0] * gActors[1].fwork[3];
|
|
|
|
sp78.y = gActors[1].fwork[1] * gActors[1].fwork[3];
|
|
|
|
sp78.z = gActors[1].fwork[2] * gActors[1].fwork[3];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-02-14 12:33:21 -06:00
|
|
|
D_80178450[1] = player->pos.x + sp6C.x;
|
|
|
|
D_80178460[1] = player->pos.y + sp6C.y;
|
|
|
|
D_80178470[1] = player->unk_138 + sp6C.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
sp78.x = gActors[2].fwork[0] * gActors[2].fwork[3];
|
|
|
|
sp78.y = gActors[2].fwork[1] * gActors[2].fwork[3];
|
|
|
|
sp78.z = gActors[2].fwork[2] * gActors[2].fwork[3];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp78, &sp6C);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-02-14 12:33:21 -06:00
|
|
|
D_80178450[2] = player->pos.x + sp6C.x;
|
|
|
|
D_80178460[2] = player->pos.y + sp6C.y;
|
|
|
|
D_80178470[2] = player->unk_138 + sp6C.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
switch (gCsFrameCount) {
|
2024-01-17 09:36:58 -06:00
|
|
|
case 330:
|
2024-01-05 17:28:02 -03:00
|
|
|
D_80177840 = 100;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 410:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_2335, RCID_FOX);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 550:
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gTeamShields[2] == (-1)) || (gTeamShields[2] == 0)) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20333, RCID_ROB64);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_2300, RCID_SLIPPY);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 682:
|
2024-01-05 17:28:02 -03:00
|
|
|
if ((gTeamShields[3] == -1) || (gTeamShields[3] == 0)) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20332, RCID_ROB64);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_2310, RCID_PEPPY);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 816:
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gTeamShields[1] == (-1)) || (gTeamShields[1] == 0)) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20331, RCID_ROB64);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_2320, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
D_80178430 += 0.2f;
|
|
|
|
D_8017842C += 0.2f;
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_1D0 = 4;
|
|
|
|
player->timer_1F8 = 0x1E;
|
|
|
|
player->unk_000 = 0.0f;
|
|
|
|
player->unk_194 = 5.0f;
|
|
|
|
player->unk_190 = 5.0f;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
D_80178430 += 0.2f;
|
|
|
|
D_8017842C += 0.2f;
|
|
|
|
player->unk_190 = 2.0f;
|
|
|
|
player->unk_25C += 0.1f;
|
|
|
|
if (player->unk_25C > 0.6f) {
|
|
|
|
player->unk_25C = 0.6f;
|
|
|
|
}
|
|
|
|
player->unk_000 += 1.0f;
|
|
|
|
player->unk_0D0 = player->unk_000 * player->unk_000;
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
D_80177A48[7] = player->vel.x;
|
|
|
|
D_80177A48[8] = player->vel.y;
|
|
|
|
D_80177A48[9] = player->vel.z;
|
|
|
|
player->unk_1D0 = 5;
|
|
|
|
player->unk_0D0 = 0.0f;
|
|
|
|
player->timer_1F8 = 0xA;
|
|
|
|
func_80078E50(player->pos.x, player->pos.y, player->unk_138, 30.0f);
|
|
|
|
}
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamAtX = player->pos.x;
|
|
|
|
gCsCamAtY = player->pos.y - D_80177A48[6];
|
|
|
|
gCsCamAtZ = player->unk_138 + D_80177D20 - D_80177A48[6];
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 5:
|
2024-02-19 07:05:11 -06:00
|
|
|
gCsCamAtX += D_80177A48[7];
|
|
|
|
gCsCamAtY += D_80177A48[8];
|
|
|
|
gCsCamAtZ += D_80177A48[9];
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_234 = 0;
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->state_1C8 = PLAYERSTATE_1C8_6;
|
|
|
|
player->timer_1F8 = 0;
|
|
|
|
D_8017837C = 4;
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_FadeOutAll(10);
|
2024-01-13 19:09:13 -06:00
|
|
|
D_800D3180[gCurrentLevel] = Play_CheckMedalStatus(150) + 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
switch (gCsFrameCount) {
|
2024-01-17 09:36:58 -06:00
|
|
|
case 961:
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80177830 = 1;
|
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 1161:
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80177830 = 0;
|
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 1255:
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_1D0 = 3;
|
|
|
|
player->timer_1F8 = 0xA;
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A6028(player->sfxSource, 0x09000002U);
|
|
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM, 50);
|
|
|
|
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 50);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
Matrix_RotateY(gCalcMatrix, ((player->unk_114 + player->unk_0E8) + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4) * M_DTOR), 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp60.x = 0.0f;
|
|
|
|
sp60.y = 0.0f;
|
|
|
|
sp60.z = player->unk_0D0;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp60, &sp54);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.x = sp54.x;
|
|
|
|
player->vel.z = sp54.z;
|
|
|
|
player->vel.y = sp54.y;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
|
|
|
player->pos.z += player->vel.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_0F8 = player->unk_0EC;
|
|
|
|
player->unk_138 = player->pos.z;
|
|
|
|
|
2024-02-19 07:05:11 -06:00
|
|
|
Math_SmoothStepToF(&player->camEye.x, gCsCamEyeX, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, gCsCamEyeY, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camEye.z, gCsCamEyeZ, D_80177A48[0], 50000.0f, 0);
|
|
|
|
Math_SmoothStepToF(&player->camAt.x, gCsCamAtX, D_80177A48[0], 50000.0f, 0.f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.y, gCsCamAtY, D_80177A48[0], 50000.0f, 0.f);
|
|
|
|
Math_SmoothStepToF(&player->camAt.z, gCsCamAtZ, D_80177A48[0], 50000.0f, 0.f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_088 += 10.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_080 = (-SIN_DEG(player->unk_088)) * 0.3f;
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_0F4 += 8.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
player->unk_0F0 = SIN_DEG(player->unk_0F4);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-06 16:39:23 -06:00
|
|
|
void func_8004C90C(Player* player) {
|
2024-01-14 01:30:21 -03:00
|
|
|
func_i4_80187520(90, player);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004C930(Player* player) {
|
|
|
|
s32 sp24;
|
|
|
|
s32 sp20;
|
|
|
|
s32 btn;
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
gCsFrameCount += 1;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->form) {
|
|
|
|
case FORM_ARWING:
|
|
|
|
if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) || ((gCurrentLevel == LEVEL_VENOM_2) && (D_8017827C == 1))) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_80193C4C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else if (gCurrentLevel == LEVEL_SECTOR_X) {
|
|
|
|
if (D_8017827C == 0) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i2_80194728(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
|
|
|
func_80048E40(player);
|
|
|
|
}
|
|
|
|
} else if (gCurrentLevel == LEVEL_AREA_6) {
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_8018ED78(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else if (gCurrentLevel == LEVEL_FORTUNA) {
|
|
|
|
func_8004C90C(player);
|
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_BOLSE) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_8018F94C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_SECTOR_Z) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_8019C85C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else if (gCurrentLevel == LEVEL_KATINA) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_80197290(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_SECTOR_Y) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_8019EE60(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_SOLAR) {
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_801A7930(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_ZONESS) {
|
2024-01-13 19:09:13 -06:00
|
|
|
func_i3_8019D76C(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_VENOM_2) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_80196D88(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else if (gCurrentLevel == LEVEL_METEO) {
|
|
|
|
if (D_8017827C == 0) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i2_8018E084(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
|
|
|
func_80048E40(player);
|
|
|
|
}
|
|
|
|
} else if ((gCurrentLevel == LEVEL_CORNERIA) && (gLevelMode == LEVELMODE_ALL_RANGE)) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i1_80191160(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800AA800(player);
|
|
|
|
} else {
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 170) {
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_BGM(SEQ_ID_38);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
func_8004B368(player);
|
|
|
|
func_800AA800(player);
|
|
|
|
}
|
|
|
|
func_800B2130(player);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case FORM_LANDMASTER:
|
|
|
|
sp20 = gInputPress->button;
|
|
|
|
sp24 = gInputHold->button;
|
|
|
|
gInputPress->button = 0;
|
|
|
|
btn = gInputPress->button;
|
|
|
|
gInputHold->button = gInputPress->button;
|
|
|
|
gInputPress->stick_y = btn;
|
|
|
|
gInputPress->stick_x = btn;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gCurrentLevel == LEVEL_TITANIA) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i5_801882CC(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else if (D_80177930 != 0) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i5_801AF8F4(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i5_801B3D04(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
func_80046358(player);
|
|
|
|
gInputPress->button = sp20;
|
|
|
|
gInputHold->button = sp24;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case FORM_BLUE_MARINE:
|
|
|
|
if (gCurrentLevel == LEVEL_AQUAS) {
|
|
|
|
func_80095604(player);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004CCC0(Player* player) {
|
|
|
|
Vec3f sp58;
|
|
|
|
PosRot sp50;
|
|
|
|
|
|
|
|
Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0EC, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E8, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 5.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->camEye.y, player->pos.y - 20.0f, 0.2f, 100.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp50.rot.z = player->unk_0D0;
|
|
|
|
sp58.x = Math_RadToDeg(Math_Atan2F(player->pos.x, player->unk_138));
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_2B4 = 1;
|
|
|
|
player->unk_2BC += 1.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_2BC > 90.0f) {
|
|
|
|
player->unk_2BC = 90.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->unk_1D0) {
|
|
|
|
case 0:
|
|
|
|
if (player->unk_19C != 0) {
|
|
|
|
player->timer_1F8 = 0xA;
|
|
|
|
} else {
|
|
|
|
player->timer_1F8 = 0x1E;
|
|
|
|
}
|
|
|
|
player->unk_1D0 = 1;
|
|
|
|
if (player->unk_4D8 > 180.0f) {
|
|
|
|
player->unk_4D8 -= 360.0f;
|
|
|
|
}
|
|
|
|
/* fallthrough */
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->unk_1D0 = 2;
|
|
|
|
if (player->unk_19C != 0) {
|
|
|
|
player->timer_1F8 = 0x3C;
|
|
|
|
} else {
|
|
|
|
player->timer_1F8 = 0x50;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
player->camEye.x += player->vel.x * 0.2f;
|
|
|
|
player->camEye.z += player->vel.z * 0.2f;
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
if (player->unk_4D8 > 140.0f) {
|
|
|
|
sp58.y = 0.0f;
|
|
|
|
} else {
|
|
|
|
sp58.y = 60.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->wings.unk_04, sp58.y, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->wings.unk_08, sp58.y, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->wings.unk_0C, sp58.y, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->wings.unk_10, sp58.y, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.1f, 15.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->unk_4D8, 190.0f, 0.1f, 6.0f, 0.001f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_4D8 > 180.0f) {
|
|
|
|
player->unk_114 += 180.0f;
|
|
|
|
if (player->unk_114 >= 360.0f) {
|
|
|
|
player->unk_114 -= 360.0f;
|
|
|
|
}
|
|
|
|
player->unk_4D8 = 360.0f - (player->unk_4D8 - 180.0f);
|
|
|
|
if ((sp58.x - player->unk_114) < 180.0f) {
|
|
|
|
player->unk_12C = 180.0f;
|
|
|
|
} else {
|
|
|
|
player->unk_12C = -180.0f;
|
|
|
|
}
|
|
|
|
player->unk_1D0 = 3;
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A5FA0(player->sfxSource, 0x09000002U, player->num);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_194 = 7.0f;
|
|
|
|
player->unk_190 = 7.0f;
|
|
|
|
}
|
|
|
|
player->unk_004 -= 0.2f;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
Math_SmoothStepToF(&player->unk_12C, 0.0f, 0.05f, 5.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp58.y = player->unk_12C * 0.3f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->wings.unk_04, sp58.y, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->wings.unk_08, sp58.y, 0.3f, 100.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp58.z = -sp58.y;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Math_SmoothStepToF(&player->wings.unk_0C, sp58.z, 0.3f, 100.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&player->wings.unk_10, sp58.z, 0.3f, 100.0f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_190 = 2.0f;
|
|
|
|
player->camEye.x += player->vel.x * 0.1f;
|
|
|
|
player->camEye.z += player->vel.z * 0.1f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_19C != 0) {
|
|
|
|
player->camEye.x += player->vel.z * 0.2f;
|
|
|
|
player->camEye.z += player->vel.x * 0.2f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_19C == 0) {
|
|
|
|
Math_SmoothStepToAngle(&player->unk_114, sp58.x, 0.1f, 2.0f, 0.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->pos.y < player->unk_0A0) {
|
|
|
|
if (player->unk_004 < 0.0f) {
|
|
|
|
player->unk_004 += 0.2f;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
player->unk_004 -= 0.2f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->timer_1F8 == 0) {
|
|
|
|
player->state_1C8 = PLAYERSTATE_1C8_3;
|
|
|
|
player->unk_014 = 0.0f;
|
|
|
|
player->unk_018 = 0.0f;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
player->pos.y += player->unk_004;
|
|
|
|
player->camAt.y += player->unk_004;
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -((player->unk_120 + player->unk_0E4 + player->unk_4D8) * M_DTOR), 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp50.rot.x = 0.0f;
|
|
|
|
sp50.rot.y = 0.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp50.rot, &sp50.pos);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.x = sp50.pos.x;
|
|
|
|
player->vel.z = sp50.pos.z;
|
|
|
|
player->vel.y = sp50.pos.y;
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->pos.y < player->unk_0A4) {
|
|
|
|
player->pos.y = player->unk_0A4;
|
|
|
|
player->vel.y = 0.0f;
|
|
|
|
}
|
|
|
|
player->pos.z += player->vel.z;
|
|
|
|
player->unk_138 = player->pos.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800B2574(player);
|
|
|
|
func_800B2130(player);
|
|
|
|
func_800AD7F0(player);
|
|
|
|
func_800AA800(player);
|
|
|
|
func_800A46A0(player);
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004D3C8(s32 arg0) {
|
|
|
|
}
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
void func_8004D3D4(Player* player, ObjectId itemId, Item* item) {
|
|
|
|
Item_Initialize(item);
|
|
|
|
item->obj.status = OBJ_INIT;
|
|
|
|
item->obj.pos.x = player->pos.x;
|
|
|
|
item->obj.pos.y = player->pos.y;
|
|
|
|
item->obj.pos.z = player->unk_138;
|
|
|
|
item->obj.id = itemId;
|
|
|
|
Object_SetInfo(&item->info, item->obj.id);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004D440(Player* player) {
|
|
|
|
s32 teamId;
|
|
|
|
|
|
|
|
func_8001CA24(player->num);
|
2024-03-01 12:57:44 -06:00
|
|
|
Audio_KillSfxBySourceAndId(player->sfxSource, 0x0900C010U);
|
|
|
|
func_800A5FA0(player->sfxSource, 0x0903F004U, player->num);
|
2024-01-05 13:19:25 -06:00
|
|
|
player->state_1C8 = PLAYERSTATE_1C8_6;
|
|
|
|
player->timer_1F8 = 0x46;
|
|
|
|
player->timer_224 = 0x14;
|
|
|
|
D_8017837C = 7;
|
|
|
|
|
|
|
|
if (player->unk_1D4 != 0) {
|
|
|
|
player->unk_284 = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!gVersusMode) {
|
|
|
|
if (gCurrentLevel == LEVEL_VENOM_ANDROSS) {
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20318, RCID_FOX);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
|
|
|
if ((gCurrentLevel != LEVEL_TRAINING) &&
|
|
|
|
((gTeamShields[1] > 0) || (gTeamShields[2] > 0) || (gTeamShields[3] > 0))) {
|
|
|
|
do {
|
2024-01-28 15:27:23 -06:00
|
|
|
teamId = RAND_INT(2.9f) + 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
} while (gTeamShields[teamId] <= 0);
|
|
|
|
|
|
|
|
switch (teamId) {
|
|
|
|
case 1:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20090, RCID_FALCO);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20092, RCID_SLIPPY);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
2024-01-25 10:43:39 -03:00
|
|
|
Radio_PlayMessage(gMsg_ID_20091, RCID_PEPPY);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gCurrentLevel != LEVEL_TRAINING) {
|
|
|
|
gLifeCount[gPlayerNum] -= 1;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (player->unk_288 > 0) {
|
|
|
|
D_80177DD0[player->unk_288 - 1][D_80177DB8[player->unk_288 - 1]] = player->num;
|
|
|
|
D_80177DB8[player->unk_288 - 1] += 1;
|
|
|
|
if (D_801778A4 == D_80177DB8[player->unk_288 - 1]) {
|
|
|
|
player->unk_288 = -1;
|
|
|
|
if (player->unk_284 == 0) {
|
|
|
|
func_8007C688(player->pos.x, player->pos.y, player->unk_138, 3.0f, 0x3E8);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (gBombCount[gPlayerNum] != 0) {
|
|
|
|
gBombCount[gPlayerNum] = 0;
|
|
|
|
func_8004D3D4(player, 0x147, &gItems[1]);
|
|
|
|
}
|
|
|
|
if (gLaserStrength[gPlayerNum] != 0) {
|
|
|
|
gLaserStrength[gPlayerNum] = 0;
|
|
|
|
func_8004D3D4(player, 0x142, &gItems[0]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004D738(Player* player) {
|
|
|
|
player->pos.y += 30.0f;
|
|
|
|
func_8007D0E0(player->pos.x, player->pos.y, player->unk_138, 6.0f);
|
|
|
|
if (gCamCount == 1) {
|
|
|
|
func_8007BFFC(player->pos.x, player->pos.y, player->unk_138, 0.0f, 0.0f, 0.0f, 3.0f, 0x50);
|
|
|
|
func_8007C688(player->pos.x, player->pos.y, player->unk_138, 3.0f, 0x320);
|
|
|
|
} else {
|
|
|
|
func_8007BFFC(player->pos.x, player->pos.y, player->unk_138, 0.0f, 0.0f, 0.0f, 3.0f, 0xA);
|
|
|
|
}
|
|
|
|
func_8004D440(player);
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004D828(Player* player) {
|
|
|
|
s32 i;
|
|
|
|
Vec3f src;
|
|
|
|
Vec3f dest;
|
|
|
|
|
|
|
|
Math_SmoothStepToF(&player->unk_0E4, 0.0f, 0.1f, 1.0f, 0.01f);
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if ((gCurrentLevel != LEVEL_VENOM_1 || gBossActive == 0) &&
|
2024-01-13 19:09:13 -06:00
|
|
|
(gLevelType == LEVELTYPE_PLANET || gCurrentLevel == LEVEL_BOLSE)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.y -= 0.5f;
|
|
|
|
player->unk_0E4 -= 2.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->pos.z += player->vel.z;
|
|
|
|
player->unk_138 = player->pos.z;
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
|
|
|
player->unk_12C += 15.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_1D0 != 0) {
|
|
|
|
player->unk_0E8 += 11.0f;
|
|
|
|
player->unk_0E4 += 17.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gCamCount == 1) {
|
2024-01-17 09:36:58 -06:00
|
|
|
if (!(gGameFrameCount & 1)) {
|
2024-01-28 15:27:23 -06:00
|
|
|
func_8007D24C(RAND_FLOAT_CENTERED(20.0) + player->pos.x, RAND_FLOAT_CENTERED(20.0) + player->pos.y,
|
|
|
|
player->unk_138, 2.2f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-17 09:36:58 -06:00
|
|
|
} else if (!(gGameFrameCount & 3)) {
|
2024-01-28 15:27:23 -06:00
|
|
|
func_8007D10C(RAND_FLOAT_CENTERED(10.0f) + player->pos.x, RAND_FLOAT_CENTERED(10.0f) + player->pos.y,
|
|
|
|
RAND_FLOAT_CENTERED(10.0f) + player->unk_138, 2.2f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((player->pos.y < player->unk_0A4) && (player->unk_1D0 == 0)) {
|
|
|
|
player->pos.y = player->unk_0A4;
|
|
|
|
player->unk_284 = 0;
|
|
|
|
player->timer_220 = 0;
|
|
|
|
player->vel.y = 10.0f;
|
|
|
|
player->unk_1D0 = 1;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A6070(player->sfxSource, 0x29000000U);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gCurrentLevel == LEVEL_CORNERIA) || (gCurrentLevel == LEVEL_FORTUNA)) {
|
|
|
|
func_80062C38(player->pos.x, player->pos.z);
|
|
|
|
} else {
|
|
|
|
func_8007D0E0(player->pos.x, player->pos.y, player->unk_138, 3.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->wings.rightState == 2) {
|
|
|
|
func_800A69F8(1, player->hit1.x, player->hit1.y, player->hit1.z);
|
|
|
|
player->wings.rightState = 1;
|
|
|
|
func_8007D0E0(player->hit1.x, player->hit1.y, player->hit1.z, 2.0f);
|
|
|
|
}
|
|
|
|
if (player->wings.leftState == 2) {
|
|
|
|
func_800A69F8(0, player->hit2.x, player->hit2.y, player->hit2.z);
|
|
|
|
player->wings.leftState = 1;
|
|
|
|
func_8007D0E0(player->hit2.x, player->hit2.y, player->hit2.z, 2.0f);
|
|
|
|
}
|
|
|
|
} else if (((player->timer_220 > 0) || (player->pos.y < player->unk_0A4) || (player->pos.y < D_80177CC0) ||
|
|
|
|
(player->timer_1FC == 0)) &&
|
|
|
|
(player->timer_1F8 == 0)) {
|
|
|
|
if (gCamCount != 4) {
|
|
|
|
if (player->unk_284 == 0) {
|
|
|
|
func_8007C688(player->pos.x, player->pos.y, player->unk_138 - (2.0f * player->vel.z), 3.0f, 0x50);
|
|
|
|
}
|
|
|
|
if (player->pos.y < player->unk_0A4) {
|
|
|
|
func_80062C38(player->pos.x, player->pos.z);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (gLevelType == LEVELTYPE_PLANET) {
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
|
func_800A69F8(2, player->pos.x, player->pos.y, player->unk_138);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
func_800A69F8(3, player->pos.x, player->pos.y, player->unk_138);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func_8007D0E0(player->pos.x, player->pos.y, player->unk_138, 5.0f);
|
|
|
|
func_8007BFFC(player->pos.x, player->pos.y, player->unk_138, player->vel.x, 0.0f, player->vel.z, 5.0f, 0x14);
|
|
|
|
func_8004D440(player);
|
|
|
|
}
|
|
|
|
Math_SmoothStepToF(&player->unk_034, 0.0f, 0.05f, 5.0f, 0.00001f);
|
|
|
|
Matrix_RotateY(gCalcMatrix, (player->unk_114 + (player->unk_134 * 0.2f)) * M_DTOR, 0);
|
|
|
|
Math_SmoothStepToF(&player->unk_000, 700.0f, 0.05f, 10.0f, 0.00001f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
src.x = player->unk_004 * (player->unk_000 * 0.7f);
|
|
|
|
src.y = player->unk_000 * 0.5f;
|
|
|
|
src.z = player->unk_000 + (400.0f - player->unk_08C);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &src, &dest);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->camEye.x = player->pos.x + dest.x;
|
|
|
|
player->camEye.z = player->pos.z + dest.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->camAt.x = player->pos.x;
|
|
|
|
player->camAt.z = player->pos.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gLevelType == LEVELTYPE_PLANET) || (gCurrentLevel == LEVEL_BOLSE)) {
|
|
|
|
player->camEye.y = (player->pos.y * player->unk_148) + dest.y;
|
|
|
|
player->camEye.y -= player->unk_02C - 50.0f;
|
|
|
|
player->camAt.y = ((player->pos.y * player->unk_14C) + 20.0f) + (player->unk_060 * 5.0f);
|
|
|
|
} else {
|
|
|
|
player->camEye.y = player->pos.y + dest.y;
|
|
|
|
player->camAt.y = player->pos.y;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gVersusMode != 0) {
|
|
|
|
func_800AE278(player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004DEF8(Player* player) {
|
2024-01-28 15:27:23 -06:00
|
|
|
s32 i;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
if (player->unk_0E4 < 0.0f) {
|
|
|
|
player->unk_0E4 += 1.0f;
|
|
|
|
}
|
|
|
|
if (player->unk_0E4 > 0.0f) {
|
|
|
|
player->unk_0E4 -= 1.0f;
|
|
|
|
}
|
|
|
|
|
|
|
|
player->pos.x += player->vel.x;
|
|
|
|
player->pos.y += player->vel.y;
|
|
|
|
|
2024-01-21 14:42:06 -06:00
|
|
|
if (((gCurrentLevel != LEVEL_VENOM_ANDROSS) || (gBossActive == 0)) && (gLevelType == LEVELTYPE_PLANET)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
player->vel.y = player->vel.y - 0.5f;
|
|
|
|
}
|
|
|
|
|
|
|
|
player->pos.z += player->vel.z;
|
|
|
|
player->unk_138 = player->pos.z + player->unk_08C;
|
|
|
|
player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130;
|
|
|
|
player->unk_12C = player->unk_12C + 15.0f;
|
|
|
|
|
|
|
|
if (player->unk_1D0 != 0) {
|
|
|
|
player->unk_0E8 += 14.0f;
|
|
|
|
player->unk_0E4 += 26.0f;
|
|
|
|
}
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
if (!(gGameFrameCount & 1)) {
|
2024-01-28 15:27:23 -06:00
|
|
|
func_8007D24C(RAND_FLOAT_CENTERED(20.0) + player->pos.x, RAND_FLOAT_CENTERED(20.0) + player->pos.y,
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_138, 2.2f);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((player->pos.y < player->unk_0A4) && (player->unk_1D0 == 0)) {
|
|
|
|
player->pos.y = player->unk_0A4;
|
|
|
|
player->timer_220 = 0;
|
|
|
|
player->vel.y = 10.0f;
|
|
|
|
player->unk_1D0 = 1;
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A6070(player->sfxSource, 0x29000000U);
|
2024-01-05 13:19:25 -06:00
|
|
|
if (gCurrentLevel == LEVEL_CORNERIA) {
|
|
|
|
func_80062C38(player->pos.x, player->pos.z);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->wings.rightState == 2) {
|
|
|
|
func_800A69F8(1, player->hit1.x, player->hit1.y, player->hit1.z);
|
|
|
|
player->wings.rightState = 0;
|
|
|
|
func_8007D0E0(player->hit1.x, player->hit1.y, player->hit1.z, 2.0f);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->wings.leftState == 2) {
|
|
|
|
func_800A69F8(0, player->hit2.x, player->hit2.y, player->hit2.z);
|
|
|
|
player->wings.leftState = 0;
|
|
|
|
func_8007D0E0(player->hit2.x, player->hit2.y, player->hit2.z, 2.0f);
|
|
|
|
}
|
|
|
|
} else if ((((player->timer_220 > 0) || (player->pos.y < player->unk_0A4)) || (player->timer_1FC == 0)) &&
|
|
|
|
(player->timer_1F8 == 0)) {
|
|
|
|
if (player->pos.y < player->unk_0A4) {
|
2024-01-13 19:09:13 -06:00
|
|
|
func_8007C688(player->pos.x, gGroundLevel + 20.0f, player->unk_138 - (2.0f * player->vel.z), 3.0f, 0x320);
|
2024-01-05 13:19:25 -06:00
|
|
|
func_80062C38(player->pos.x, player->pos.z);
|
|
|
|
}
|
|
|
|
func_8007D0E0(player->pos.x, player->pos.y - (2.0f * player->vel.y), player->unk_138 - (2.0f * player->vel.z),
|
|
|
|
6.0f);
|
|
|
|
func_8007BFFC(player->pos.x, player->pos.y - player->vel.y, player->unk_138 - (2.0f * player->vel.z), 0.0f,
|
|
|
|
0.0f, 0.0f, 3.0f, 0x14);
|
|
|
|
if (gLevelType == LEVELTYPE_PLANET) {
|
2024-01-28 15:27:23 -06:00
|
|
|
for (i = 0; i < 2; i++) {
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800A69F8(2, player->pos.x, player->pos.y, player->unk_138);
|
|
|
|
}
|
|
|
|
|
2024-01-28 15:27:23 -06:00
|
|
|
for (i = 0; i < 4; i++) {
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800A69F8(4, player->pos.x, player->pos.y, player->unk_138);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func_8004D440(player);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
player->unk_034 -= 3.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if (player->unk_1D0 != 0) {
|
|
|
|
player->unk_034 += 10.0f;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((D_80161A88 == 2) && (player->pos.y <= player->unk_0A4)) {
|
2024-01-13 19:09:13 -06:00
|
|
|
func_8007D9DC(player->pos.x, gGroundLevel + 2.0f, player->unk_138, 3.0f, 20.0f, 0);
|
|
|
|
func_8007ADF4(player->pos.x, gGroundLevel, player->unk_138, 0.1f, 2.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8004E3D8(Player* player) {
|
|
|
|
player->unk_228 = 0;
|
|
|
|
player->unk_280 = 0;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
if (gGameFrameCount & 1) {
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80137E84[gPlayerNum] = 1;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
switch (player->form) {
|
|
|
|
case FORM_ARWING:
|
|
|
|
if (gLevelMode == LEVELMODE_ALL_RANGE) {
|
|
|
|
func_8004D828(player);
|
|
|
|
} else {
|
|
|
|
func_8004DEF8(player);
|
|
|
|
func_800ADF58(player);
|
|
|
|
}
|
|
|
|
func_800A8BA4(player);
|
|
|
|
func_800AA800(player);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case FORM_LANDMASTER:
|
|
|
|
func_8004D738(player);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case FORM_BLUE_MARINE:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_801AB9B0(player);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case FORM_ON_FOOT:
|
|
|
|
func_8004D738(player);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004E4D4(Actor* actor) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Vec3f sp54;
|
|
|
|
Vec3f sp48;
|
|
|
|
Vec3f sp3C;
|
|
|
|
Player* sp38 = gPlayer;
|
|
|
|
f32 sp34;
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[7] += 3.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
actor->unk_0F4.z = SIN_DEG(actor->fwork[7]) * 1.5f;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[8] += 2.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
sp34 = SIN_DEG(actor->fwork[8]) * 10.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 0.0f, 0.05f, 1.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.x, actor->fwork[0] + sp38->pos.x, 0.03f, 10.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[1] + sp38->pos.y + sp34, 0.03f, 10.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.z, actor->fwork[2] + sp38->unk_138, 0.03f, 10.0f, 0.0f);
|
|
|
|
actor->obj.rot.x = -sp38->unk_0E4;
|
|
|
|
actor->obj.rot.y = sp38->unk_0E8 + 180.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = 2;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 0x32;
|
|
|
|
actor->fwork[9] = 2.0f;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, actor->sfxSource, 0);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
/* fallthrough */
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
if (gLevelType == LEVELTYPE_PLANET) {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[21] += 0.4f;
|
|
|
|
if (actor->fwork[21] > 0.6f) {
|
|
|
|
actor->fwork[21] = 0.6f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
actor->fwork[9] *= 1.2f;
|
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 10:
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = 0xB;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 0x96;
|
|
|
|
actor->timer_0BE = 0x28;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, actor->sfxSource, 0);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
/* fallthrough */
|
|
|
|
case 11:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
actor->fwork[9] += 2.0f;
|
|
|
|
if (actor->fwork[9] > 50.0f) {
|
|
|
|
actor->fwork[9] = 50.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BE == 0) {
|
|
|
|
switch (actor->index) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 1:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.y += 0.3f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, -70.0f, 0.05f, 4.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.y -= 0.3f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 70.0f, 0.05f, 4.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.x -= 0.4f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 1000.0f, 0.05f, 6.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 30:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[3] += D_800CA098[actor->index];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_RotateY(gCalcMatrix, actor->fwork[3] * M_DTOR, 0);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp54.x = 0.0f;
|
2024-01-13 22:45:37 +00:00
|
|
|
sp54.y = D_800CA0A4[actor->index];
|
|
|
|
sp54.z = D_800CA0B0[actor->index];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp54, &sp3C);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[0] = sp3C.x;
|
|
|
|
actor->fwork[1] = sp3C.y;
|
|
|
|
actor->fwork[2] = sp3C.z - 100.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-28 15:27:23 -06:00
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, SIN_DEG(actor->fwork[3]) * -30.0f, 0.1f, 2.0f, 0.0f);
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->obj.pos.x, actor->fwork[0] + sp38->pos.x, 0.03f, 10.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[1] + sp38->pos.y + sp34, 0.03f, 10.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.z, actor->fwork[2] + sp38->unk_138, 0.03f, 10.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 31:
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, actor->sfxSource, 0);
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state += 1;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
/* fallthrough */
|
|
|
|
|
|
|
|
case 32:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.x, -20.0f, 0.1f, 0.5f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->fwork[9], 25.0f, 0.1f, 2.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 0.0f, 0.1f, 0.5f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
sp54.x = 0.0f;
|
|
|
|
sp54.y = 0.0f;
|
2024-01-13 22:45:37 +00:00
|
|
|
sp54.z = actor->fwork[9];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x = sp48.x;
|
|
|
|
actor->vel.y = sp48.y;
|
|
|
|
actor->vel.z = sp48.z;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004EBD0(Actor* actor) {
|
2024-01-05 13:19:25 -06:00
|
|
|
Vec3f src;
|
|
|
|
Vec3f dest;
|
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
if (actor->state < 4) {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[9] = 0.4f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.pos.x += (D_80178450[actor->index] - actor->obj.pos.x) * 0.4f;
|
|
|
|
actor->obj.pos.y += (D_80178460[actor->index] - actor->obj.pos.y) * 0.4f;
|
|
|
|
actor->obj.pos.z += (D_80178470[actor->index] - actor->obj.pos.z) * 0.4f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.z *= 0.98f;
|
|
|
|
actor->obj.rot.x = -gPlayer[0].unk_0E4;
|
|
|
|
actor->obj.rot.y = gPlayer[0].unk_0E8 + 180.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
if (1) {}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[7] += 1.0f;
|
|
|
|
if ((s32) actor->fwork[7] & 0x40) {
|
|
|
|
actor->fwork[0] += 0.1f;
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[0] -= 0.1f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[8] += 1.2f;
|
|
|
|
if ((s32) actor->fwork[8] & 0x40) {
|
|
|
|
actor->fwork[1] += 0.1f;
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[1] -= 0.1f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[3] *= 0.992f;
|
|
|
|
if (actor->fwork[3] < 1.2f) {
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state += 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[3] *= 0.997f;
|
|
|
|
if (actor->fwork[3] < 1.0f) {
|
|
|
|
actor->fwork[3] = 1.0f;
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state += 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 560;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 110) {
|
2024-01-05 13:19:25 -06:00
|
|
|
gPlayer[0].timer_1F8 = 0x2710;
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 260) {
|
2024-01-05 13:19:25 -06:00
|
|
|
gPlayer[0].timer_1FC = 0x2710;
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state++;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 10;
|
2024-03-01 12:57:44 -06:00
|
|
|
func_800A6028(actor->sfxSource, 0x09000002);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
if (actor->timer_0BC == 0) {
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state++;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 30;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 4:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[21] += 0.4f;
|
|
|
|
if (actor->fwork[21] > 0.6f) {
|
|
|
|
actor->fwork[21] = 0.6f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[6] += 1.0f;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gCalcMatrix, (gPlayer[0].unk_0E8 + 180.0f) * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -(gPlayer[0].unk_0E4 * M_DTOR), 1);
|
2024-01-06 16:39:23 -06:00
|
|
|
Matrix_RotateZ(gCalcMatrix, -((gPlayer[0].unk_0F8 + gPlayer[0].unk_0F0) * M_DTOR), 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
src.x = 0.0f;
|
|
|
|
src.y = 0.0f;
|
2024-01-13 22:45:37 +00:00
|
|
|
src.z = actor->fwork[6] * actor->fwork[6];
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &src, &dest);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x = dest.x;
|
|
|
|
actor->vel.y = dest.y;
|
|
|
|
actor->vel.z = dest.z;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
|
|
|
func_80078E50(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 30.0f);
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.pos.y += 5.0f;
|
|
|
|
actor->fwork[21] -= 0.02f;
|
|
|
|
if (actor->fwork[21] < 0.0f) {
|
|
|
|
actor->fwork[21] = 0.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004F05C(Actor* actor) {
|
|
|
|
if (((gLevelType == LEVELTYPE_PLANET) && (actor->unk_0B6 == 0)) || (gCurrentLevel == LEVEL_BOLSE)) {
|
|
|
|
actor->fwork[0] += 3.0f;
|
2024-01-28 15:27:23 -06:00
|
|
|
actor->fwork[1] = SIN_DEG(actor->fwork[0]) * 1.5f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
switch (gCurrentLevel) {
|
|
|
|
case LEVEL_BOLSE:
|
2024-01-13 22:45:37 +00:00
|
|
|
switch (actor->unk_0B6) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->unk_0F4.z += actor->unk_0F4.y;
|
2024-01-28 15:27:23 -06:00
|
|
|
actor->vel.x = SIN_DEG(actor->unk_0F4.z) * 10.0f;
|
|
|
|
actor->obj.rot.z = SIN_DEG(actor->unk_0F4.z) * 40.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, actor->fwork[1], 0.05f, 0.3f, 0.0f);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = 2;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 0x64;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x09000002U, actor->sfxSource, 0U);
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 5.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
case 2:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[11] = 2;
|
|
|
|
actor->vel.z -= 5.0f;
|
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case 31:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 32:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.z += actor->unk_0F4.z;
|
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 30:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_AREA_6:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_8018DA58(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SECTOR_Y:
|
2024-01-13 22:45:37 +00:00
|
|
|
switch (actor->unk_0B6) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_8019FF00(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 42:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
|
|
|
if (actor->obj.pos.x >= -3500.0f) {
|
|
|
|
if (actor->obj.pos.z <= 3000.0f) {
|
2024-01-21 14:42:06 -06:00
|
|
|
if ((fabsf(actor->obj.pos.y) <= 400.0f) && (gCsFrameCount < 0x12D)) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8007D2C8(actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 8.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 43:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SECTOR_X:
|
2024-01-24 08:45:55 -06:00
|
|
|
if ((actor->state != 0) && (actor->state == 1)) {
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.y += 0.1f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.x, -20.0f, 0.1f, 0.5f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SECTOR_Z:
|
|
|
|
case LEVEL_KATINA:
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-17 09:36:58 -06:00
|
|
|
case 100:
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->obj.pos.x, actor->vwork[0x14].x, 0.03f, 3.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.y, actor->vwork[0x14].y, 0.03f, 2.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.z, actor->vwork[0x14].z, 0.03f, 2.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 0.0f, 0.02f, 0.3f, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->obj.rot.z = actor->unk_0F4.z;
|
|
|
|
if (actor->unk_0B6 == 0xA) {
|
|
|
|
actor->obj.pos.z = gPlayer[0].camEye.z + 12000.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 1:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.y += 0.8f;
|
|
|
|
actor->vel.x += 0.8f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 420.0f, 0.1f, 15.0f, 0.001f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 2:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.y += 0.8f;
|
|
|
|
actor->vel.x -= 0.8f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, -420.0f, 0.1f, 15.0f, 0.001f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 3:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.y += 1.2f;
|
|
|
|
actor->vel.z += 0.1f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.x, -45.0f, 0.1f, 15.0f, 0.001f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 10:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x -= 1.0f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, -45.0f, 0.05f, 0.5f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 11:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x -= 2.0f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, -70.0f, 0.1f, 6.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.y, 225.0f, 0.05f, 2.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 12:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.x += 2.0f;
|
|
|
|
actor->vel.y += 1.0f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 80.0f, 0.1f, 6.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.x, -15.0f, 0.05f, 4.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.y, 135.0f, 0.05f, 2.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
case 13:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->vel.y += 2.0f;
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, -400.0f, 0.2f, 14.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.x, -45.0f, 0.05f, 4.0f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004F798(Actor* actor) {
|
|
|
|
actor->iwork[11] = 2;
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->obj.pos.x, actor->fwork[0], 0.05f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.pos.y, actor->fwork[1], 0.05f, 50.0f, 0.0f);
|
|
|
|
Math_SmoothStepToF(&actor->obj.rot.z, 0.0f, 0.05f, 1.0f, 0.0f);
|
|
|
|
actor->obj.pos.z -= 2.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[29] = 10.0f;
|
|
|
|
actor->vel.z -= 100.0f;
|
|
|
|
if ((actor->obj.pos.z + D_80177D20) < -15000.0f) {
|
2024-03-01 12:57:44 -06:00
|
|
|
Object_Kill(&actor->obj, actor->sfxSource);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004F8AC(Actor* actor) {
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
if (gCurrentLevel == LEVEL_AQUAS) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80093164(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (gPlayer[0].state_1C8) {
|
|
|
|
case PLAYERSTATE_1C8_7:
|
|
|
|
switch (gCurrentLevel) {
|
|
|
|
case LEVEL_SECTOR_Y:
|
|
|
|
if (gPlayer[0].unk_1D0 >= 3) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_8019FF00(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SOLAR:
|
|
|
|
if (gPlayer[0].unk_1D0 >= 3) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_801A8BE8(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_ZONESS:
|
|
|
|
if (gPlayer[0].unk_1D0 >= 3) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_8019E5F0(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_VENOM_ANDROSS:
|
|
|
|
case LEVEL_VENOM_2:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_80195E44(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_KATINA:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_80197F10(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SECTOR_Z:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i4_8019DD20(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_AREA_6:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_8018DA58(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_METEO:
|
|
|
|
if (D_8017827C == 0) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i2_8018ED9C(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049630(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_FORTUNA:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->unk_0B6 == 0xB) {
|
2024-01-24 08:45:55 -06:00
|
|
|
switch (actor->state) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
2024-01-21 14:42:06 -06:00
|
|
|
if (gCsFrameCount == 0x64) {
|
2024-01-24 08:45:55 -06:00
|
|
|
actor->state = 1;
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->timer_0BC = 0x32;
|
|
|
|
actor->iwork[0] = 255;
|
2024-03-01 12:57:44 -06:00
|
|
|
AUDIO_PLAY_SFX(0x2902F026U, actor->sfxSource, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->scale, 0.5f, 0.03f, 0.01f, 0.0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178348 = D_80178340 = D_80178350 = D_80178354 = 0;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if ((actor->timer_0BC == 0x2B) || (actor->timer_0BC == 0x2E) ||
|
|
|
|
(actor->timer_0BC == 0x31)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178340 = 0xC0;
|
|
|
|
D_80178348 = D_80178350 = D_80178354 = 255;
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->iwork[0] -= 2;
|
|
|
|
if (actor->iwork[0] < 0) {
|
|
|
|
actor->iwork[0] = 0;
|
|
|
|
actor->scale = 0.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
D_8017836C = actor->iwork[0] / 255.0f;
|
2024-01-13 19:09:13 -06:00
|
|
|
D_80178370 = gActors[0].obj.pos.x + 10.0f;
|
|
|
|
D_80178374 = gActors[0].obj.pos.y - 40.0f;
|
|
|
|
D_80178378 = gActors[0].obj.pos.z - 70.0f;
|
2024-01-05 13:19:25 -06:00
|
|
|
D_80178360 = 255;
|
|
|
|
D_80178364 = 255;
|
|
|
|
D_80178368 = 0x50;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
case LEVEL_CORNERIA:
|
|
|
|
if (gLevelMode == LEVELMODE_ALL_RANGE) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004E4D4(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004EBD0(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_SECTOR_X:
|
|
|
|
if (D_8017827C != 0) {
|
2024-01-13 22:45:37 +00:00
|
|
|
func_80049630(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004E4D4(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_TITANIA:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004E4D4(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_MACBETH:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i5_801B28BC(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case LEVEL_BOLSE:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004F05C(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004EBD0(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case PLAYERSTATE_1C8_2:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004F05C(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PLAYERSTATE_1C8_8:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004F798(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PLAYERSTATE_1C8_0:
|
|
|
|
if (gCurrentLevel == LEVEL_SECTOR_Y) {
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i6_8019FF00(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004FCB8(Actor* actor, s32 arg1) {
|
2024-01-05 13:19:25 -06:00
|
|
|
f32 angle;
|
|
|
|
f32 scale;
|
|
|
|
s32 i;
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->timer_0BC == 0) {
|
|
|
|
actor->timer_0BC = 32;
|
|
|
|
actor->fwork[5] = 0.3f;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->fwork[5] > 0.0f) {
|
|
|
|
scale = actor->fwork[5];
|
|
|
|
actor->fwork[5] -= 0.05f;
|
2024-01-05 13:19:25 -06:00
|
|
|
RCP_SetupDL_49();
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 16, 16, 240, 255);
|
|
|
|
angle = Math_Atan2F(gPlayer[0].camEye.x - gPlayer[0].camAt.x, gPlayer[0].camEye.z - gPlayer[0].camAt.z);
|
|
|
|
|
|
|
|
for (i = arg1; i < (arg1 + 4); i++) {
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Translate(gGfxMatrix, D_800CA110[i].x + actor->obj.pos.x, D_800CA110[i].y + actor->obj.pos.y,
|
|
|
|
D_800CA110[i].z + actor->obj.pos.z, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(gGfxMatrix, angle, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
void func_8004FEC0(Actor* actor) {
|
2024-01-05 13:19:25 -06:00
|
|
|
static f32 D_800CA210 = 0.0f;
|
|
|
|
static f32 D_800CA214 = 0.0f;
|
|
|
|
static f32 D_800CA218 = 0.0f;
|
|
|
|
f32 sp2DC;
|
|
|
|
f32 sp2D8;
|
|
|
|
f32 sp2D4;
|
|
|
|
s32 sp2D0;
|
|
|
|
s32 pad2C4[3];
|
|
|
|
Vec3f sp2B8;
|
|
|
|
Vec3f sp2AC;
|
|
|
|
Vec3f sp144[30];
|
|
|
|
s32 pad[3];
|
|
|
|
s32 animFrameData;
|
|
|
|
f32 camX;
|
|
|
|
f32 camY;
|
|
|
|
f32 camZ;
|
|
|
|
f32 y;
|
|
|
|
f32 x;
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
switch (actor->unk_0B6) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 1000:
|
|
|
|
RCP_SetupDL(&gMasterDisp, 0x2D);
|
2024-01-13 22:45:37 +00:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, actor->unk_046);
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_40018A0);
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->unk_046 >= 0x33) {
|
|
|
|
func_8005ADAC(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 0:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005B388(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
if (gCurrentLevel == LEVEL_SECTOR_Z) {
|
|
|
|
gSPFogPosition(gMasterDisp++, gFogNear, 1005);
|
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->info.bonus = 1;
|
2024-01-05 13:19:25 -06:00
|
|
|
func_800515C4();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 10:
|
|
|
|
RCP_SetupDL_40();
|
|
|
|
Matrix_Scale(gGfxMatrix, 60.0f, 60.0f, 1.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6020810);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 11:
|
|
|
|
RCP_SetupDL_64_2();
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
|
|
|
|
Matrix_Scale(gGfxMatrix, 60.0f, 60.0f, 1.0f, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 10.0f, 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Scale(gGfxMatrix, actor->scale, actor->scale, 1.0f, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
|
|
|
|
RCP_SetupDL_49();
|
2024-01-13 22:45:37 +00:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, actor->iwork[0]);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 255, 00, actor->iwork[0]);
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 20:
|
2024-03-16 20:10:21 -03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_ENMY_SPACE_400AAE0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 24:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_D009A40);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005ADAC(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 25:
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->index & 1) {
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6001DA0);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6001360);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 26:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6004FE0);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -60.0f, 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005B1E8(actor, 2);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 28:
|
2024-03-16 20:10:21 -03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_ENMY_SPACE_400AAE0);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.f, 0.f, -60.0f, 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005B1E8(actor, 2);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 30:
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005F670(&actor->obj.pos);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->unk_046 != 0) {
|
2024-01-05 13:19:25 -06:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x37);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, 0x00002000);
|
|
|
|
Rand_SetSeed(1, 29000, 9876);
|
|
|
|
|
|
|
|
for (sp2D0 = 0; sp2D0 < 30; sp2D0++) {
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_Translate(gGfxMatrix, RAND_FLOAT_CENTERED_SEEDED(3000.0f) * actor->fwork[20],
|
|
|
|
RAND_FLOAT_CENTERED_SEEDED(3000.0f) * actor->fwork[20],
|
|
|
|
RAND_FLOAT_CENTERED_SEEDED(3000.0f) * actor->fwork[20], 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, 2.0f * RAND_FLOAT_SEEDED(M_PI), 1);
|
2024-01-17 09:36:58 -06:00
|
|
|
Matrix_RotateZ(gGfxMatrix, (2.0f * gGameFrameCount) * M_DTOR, 1);
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_RotateX(gGfxMatrix, 2.0f * RAND_FLOAT_SEEDED(M_PI), 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
switch (sp2D0 & 3) {
|
|
|
|
case 0:
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 0.3f, 1.0f, 1);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 0.5f, 1.0f, 1);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.5f, 1.0f, 1.0f, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_Scale(gGfxMatrix, RAND_FLOAT_SEEDED(8.0f) + 8.0f, RAND_FLOAT_SEEDED(8.0f) + 8.0f, 10.0f, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1021E20);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) {
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_RotateX(gGfxMatrix, 20.0f * M_DTOR, 1);
|
2024-01-17 09:36:58 -06:00
|
|
|
Matrix_RotateY(gGfxMatrix, (gGameFrameCount * 0.5f) * M_DTOR, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_Scale(gGfxMatrix, 2.0f, 2.0f, 2.0f, 1);
|
|
|
|
} else {
|
2024-01-28 15:27:23 -06:00
|
|
|
Matrix_RotateX(gGfxMatrix, -10.0f * M_DTOR, 1);
|
2024-01-17 09:36:58 -06:00
|
|
|
Matrix_RotateY(gGfxMatrix, (gGameFrameCount * 0.3f) * M_DTOR, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_Scale(gGfxMatrix, 4.0f, 4.0f, 4.0f, 1);
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
}
|
|
|
|
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.f, -590.0f, 0.f, 1);
|
|
|
|
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
|
|
|
|
gSPDisplayList(gMasterDisp++, D_600BAA0);
|
|
|
|
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
|
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
|
|
|
|
2024-01-17 09:36:58 -06:00
|
|
|
switch ((gGameFrameCount >> 3) & 3) {
|
2024-01-05 13:19:25 -06:00
|
|
|
case 0:
|
|
|
|
sp2DC = 255.0f;
|
|
|
|
sp2D8 = 0.0f;
|
|
|
|
sp2D4 = 0.0f;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
sp2DC = 0.0f;
|
|
|
|
sp2D8 = 255.0f;
|
|
|
|
sp2D4 = 0.0f;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
sp2DC = 0.0f;
|
|
|
|
sp2D8 = 0.0f;
|
|
|
|
sp2D4 = 255.0f;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
sp2DC = 255.0f;
|
|
|
|
sp2D8 = 255.0f;
|
|
|
|
sp2D4 = 0.0f;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
Math_SmoothStepToF(&D_800CA210, sp2DC, 1.0f, 20.0f, 0);
|
|
|
|
Math_SmoothStepToF(&D_800CA214, sp2D8, 1.0f, 20.0f, 0);
|
|
|
|
Math_SmoothStepToF(&D_800CA218, sp2D4, 1.0f, 20.0f, 0);
|
|
|
|
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, (s32) D_800CA210, (s32) D_800CA214, (s32) D_800CA218, 128);
|
|
|
|
|
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) {
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.02f, 1.02f, 1.02f, 1);
|
|
|
|
} else {
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.97f, 0.97f, 0.97f, 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
|
|
|
|
gDPSetTextureFilter(gMasterDisp++, 0 << 12);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6000D80);
|
|
|
|
gDPSetTextureFilter(gMasterDisp++, 2 << 12);
|
|
|
|
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
|
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7) {
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.075f, 0.075f, 0.075f, 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 31:
|
|
|
|
RCP_SetupDL_21();
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 2.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_101ABD0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 32:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6008770);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 33:
|
2024-01-13 22:45:37 +00:00
|
|
|
if ((actor->index == 3) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7)) {
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_D00B880);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_600E050);
|
|
|
|
}
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -60.0f, 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8005B1E8(actor, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 34:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6001530);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 35:
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.125f, 0.125f, 0.125f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
/* fallthrough */
|
|
|
|
case 39:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_60097E0);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004FCB8(actor, 4);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 36:
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Scale(gGfxMatrix, actor->scale, actor->scale, actor->scale, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_601D730);
|
2024-01-13 22:45:37 +00:00
|
|
|
func_8004FCB8(actor, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 37:
|
|
|
|
RCP_SetupDL_49();
|
2024-01-13 19:09:13 -06:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, actor->iwork[0], actor->iwork[1], actor->iwork[2], actor->iwork[3]);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, actor->iwork[4], actor->iwork[5], actor->iwork[6], actor->iwork[7]);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Scale(gGfxMatrix, actor->scale, actor->fwork[4], 1.0f, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 38:
|
2024-01-13 22:45:37 +00:00
|
|
|
animFrameData = Animation_GetFrameData(D_800CA1F4[actor->iwork[4]], actor->iwork[5], sp144);
|
|
|
|
Math_SmoothStepToVec3fArray(sp144, actor->vwork, 1, animFrameData, actor->fwork[2], 100.0f, .0f);
|
2024-01-05 13:19:25 -06:00
|
|
|
RCP_SetupDL_30(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 150, 255, 150, 255);
|
2024-02-01 21:05:17 -06:00
|
|
|
Animation_DrawSkeleton(1, D_602D140, actor->vwork, 0, 0, actor, &gIdentityMatrix);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->fwork[0] != 0.0f) {
|
2024-01-05 13:19:25 -06:00
|
|
|
RCP_SetupDL_49();
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 32, 32, 255);
|
|
|
|
Matrix_Translate(gGfxMatrix, 10.0f, -5.0f, -40.0f, 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_RotateY(gGfxMatrix, (-actor->obj.rot.y) * M_DTOR, 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
Graphics_SetScaleMtx(1.0f);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Scale(gGfxMatrix, actor->fwork[0], actor->fwork[0], actor->fwork[0], 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
camX = gPlayer[0].camEye.x - actor->obj.pos.x;
|
|
|
|
camY = gPlayer[0].camEye.y - actor->obj.pos.y;
|
|
|
|
camZ = gPlayer[0].camEye.z - (actor->obj.pos.z + D_80177D20);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
y = -Math_Atan2F(camX, camZ);
|
|
|
|
x = Math_Atan2F(camY, sqrtf(SQ(camZ) + SQ(camX)));
|
|
|
|
|
|
|
|
Matrix_RotateY(gGfxMatrix, -y, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, -x, 1);
|
|
|
|
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->fwork[0], 0.0f, 0.1f, 0.2f, 0.05f);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->fwork[6] != 0.0f) {
|
2024-01-05 13:19:25 -06:00
|
|
|
RCP_SetupDL_49();
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 48, 0, 255);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_RotateY(gCalcMatrix, (actor->obj.rot.y - 90.0f) * M_DTOR, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
sp2B8.x = 210.0f;
|
|
|
|
sp2B8.y = 0.0f;
|
|
|
|
sp2B8.z = 40.0f;
|
|
|
|
|
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, (Vec3f*) (&sp2B8), &sp2AC);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Translate(gGfxMatrix, actor->obj.pos.x + sp2AC.x, actor->obj.pos.y + sp2AC.y,
|
|
|
|
actor->obj.pos.z + sp2AC.z, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, actor->fwork[6], actor->fwork[6], actor->fwork[6], 1);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
camX = gPlayer[0].camEye.x - actor->obj.pos.x;
|
|
|
|
camY = gPlayer[0].camEye.y - actor->obj.pos.y;
|
|
|
|
camZ = gPlayer[0].camEye.z - (actor->obj.pos.z + D_80177D20);
|
2024-01-05 13:19:25 -06:00
|
|
|
|
|
|
|
y = -Math_Atan2F(camX, camZ);
|
|
|
|
x = Math_Atan2F(camY, sqrtf(SQ(camZ) + SQ(camX)));
|
|
|
|
|
|
|
|
Matrix_RotateY(gGfxMatrix, -y, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, -x, 1);
|
|
|
|
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
2024-01-13 22:45:37 +00:00
|
|
|
Math_SmoothStepToF(&actor->fwork[6], 0.00f, 0.1f, 0.6f, 0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 40:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_60132A0);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 41:
|
2024-01-17 09:36:58 -06:00
|
|
|
func_i3_801BE0F0(actor);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 42:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6014A40);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 43:
|
|
|
|
RCP_SetupDL_49();
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, actor->iwork[0]);
|
2024-01-05 13:19:25 -06:00
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 0xC0, 128, 255);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_RotateY(
|
|
|
|
gGfxMatrix,
|
|
|
|
Math_Atan2F(gPlayer[0].camEye.x - gPlayer[0].camAt.x, gPlayer[0].camEye.z - gPlayer[0].camAt.z), 1);
|
2024-01-13 22:45:37 +00:00
|
|
|
Matrix_Scale(gGfxMatrix, actor->fwork[0], actor->fwork[0], actor->fwork[0], 1);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-13 22:45:37 +00:00
|
|
|
if (actor->iwork[0] != 0) {
|
|
|
|
actor->iwork[0] -= 7;
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
2024-01-13 22:45:37 +00:00
|
|
|
actor->fwork[0] += 0.2f;
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 44:
|
2024-03-14 16:31:03 -05:00
|
|
|
Animation_GetFrameData(&D_AQ_6020A40, actor->iwork[0], actor->vwork);
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, 0x00002000);
|
2024-03-14 16:31:03 -05:00
|
|
|
Animation_DrawSkeleton(1, D_AQ_6020C6C, actor->vwork, 0, 0, &actor->index, &gIdentityMatrix);
|
2024-01-05 13:19:25 -06:00
|
|
|
gSPSetGeometryMode(gMasterDisp++, 0x00002000);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 45:
|
|
|
|
Matrix_Scale(gGfxMatrix, 0.5f, 0.5f, 0.5f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-03-14 16:31:03 -05:00
|
|
|
gSPDisplayList(gMasterDisp++, D_AQ_600EEF0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 46:
|
2024-03-14 16:31:03 -05:00
|
|
|
gSPDisplayList(gMasterDisp++, D_AQ_601DE60);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
|
|
|
|
case 47:
|
2024-03-14 16:31:03 -05:00
|
|
|
gSPDisplayList(gMasterDisp++, D_AQ_602B4C0);
|
2024-01-05 13:19:25 -06:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_800515C4(void) {
|
|
|
|
Vec3f* var_s6_2;
|
|
|
|
s32 i;
|
|
|
|
s32 j;
|
|
|
|
f32 sp9C[4];
|
|
|
|
Gfx* var_fp;
|
|
|
|
|
|
|
|
(void) "Demo_Time=%d\n";
|
|
|
|
(void) "Demo_Time=%d\n";
|
|
|
|
(void) "d Enm->wrk0 %d\n";
|
|
|
|
|
|
|
|
if (gGameState == GSTATE_TITLE) {
|
|
|
|
var_fp = D_60320E0;
|
|
|
|
} else if (gGameState == GSTATE_CREDITS) {
|
|
|
|
var_fp = D_7010970;
|
|
|
|
} else {
|
|
|
|
var_fp = D_1024AC0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gCurrentLevel == LEVEL_TITANIA) {
|
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, 1005);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (D_80177B8C != 0) {
|
2024-02-01 21:05:17 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_E000000);
|
2024-01-05 13:19:25 -06:00
|
|
|
} else {
|
2024-02-01 21:05:17 -06:00
|
|
|
gSPDisplayList(gMasterDisp++, D_E003AB0);
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
if ((gCurrentLevel != LEVEL_AQUAS) &&
|
|
|
|
((gCurrentLevel != LEVEL_SECTOR_Z) || (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7))) {
|
|
|
|
RCP_SetupDL_49();
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255);
|
|
|
|
for (i = 0, var_s6_2 = D_800CA0BC; i < 4; i++, var_s6_2++) {
|
|
|
|
if ((i != 1) || (D_80177B8C != 0)) {
|
|
|
|
sp9C[i] = 0.0f;
|
|
|
|
if (i < 2) {
|
2024-01-17 09:36:58 -06:00
|
|
|
if (!(gGameFrameCount & 0x38)) {
|
|
|
|
sp9C[i] = D_800CA170[gGameFrameCount & 7];
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 32, 32, 128);
|
|
|
|
} else {
|
2024-01-17 09:36:58 -06:00
|
|
|
if (!((gGameFrameCount + 32) & 0x38)) {
|
|
|
|
sp9C[i] = D_800CA170[gGameFrameCount & 7];
|
2024-01-05 13:19:25 -06:00
|
|
|
}
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 32, 32, 255, 128);
|
|
|
|
}
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, var_s6_2->x, var_s6_2->y, var_s6_2->z, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, sp9C[i], sp9C[i], 1.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, var_fp);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 48);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 255, 0, 48);
|
|
|
|
for (i = 0, var_s6_2 = D_800CA0EC; i < 3; i++, var_s6_2++) {
|
2024-01-17 09:36:58 -06:00
|
|
|
sp9C[i] = D_800CA190[gGameFrameCount & 1];
|
2024-01-05 13:19:25 -06:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, var_s6_2->x, var_s6_2->y, var_s6_2->z, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, sp9C[i], sp9C[i], 1.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, var_fp);
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
for (j = 0; j < 4; j++) {
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_800CA1B4[2 * j], 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, D_800CA1D4[2 * j], D_800CA1D4[2 * j], 1.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, var_fp);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
}
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
}
|
2024-01-05 17:28:02 -03:00
|
|
|
|
2024-01-05 13:19:25 -06:00
|
|
|
if ((gCurrentLevel == LEVEL_METEO) && (gPlayer[0].timer_1FC != 0)) {
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 128);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 255, 255, 32, 128);
|
|
|
|
Matrix_Translate(gGfxMatrix, D_80177A48[3] * (-74.0f), -232.0f, 1190.0f, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, D_800CA198[gPlayer[0].timer_1FC], D_800CA198[gPlayer[0].timer_1FC], 1.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, var_fp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|