#include "global.h" extern UNK_TYPE D_800D2F50; // type unclear. unused? extern s32 D_800D2F54; // only gets set to 0. unused? extern f32 D_800D2F58; extern f32 D_800D2F5C; // holds float versions of gVolumeSettings. Unused? extern f32 D_800D2F60; extern f32 D_800D2F64; extern u8 D_800D2F68; extern u8 D_800D2F6C[20]; extern Vec3f D_800D2F80; extern Vec3f D_800D2F8C; extern EnvSettings* D_800D2F98[21]; extern f32 D_800D2FEC[5]; extern s32 D_800D3000[4][4]; extern Vec3f D_800D3040[6]; extern Vec3f D_800D3088[4]; extern Vec3f D_800D30B8[4]; extern Vec3f D_800D30E8; extern f32 D_800D30F4[4]; extern f32 D_800D3104[4]; extern f32 D_800D3114[4]; extern f32 D_800D3124[12]; extern f32 D_800D3154[4]; extern s32 D_800D3164[4]; extern u8 D_800D317C; extern u8 D_800D3180[30]; extern s32 D_800D31A0[4]; #define MEM_ARRAY_ALLOCATE(arr, count) ((arr) = Memory_Allocate((count) * sizeof(*(arr)))) s32 Play_CheckMedalStatus(u16 hitCount) { if ((gTeamShields[2] > 0) && (gTeamShields[3] > 0) && (gTeamShields[1] > 0) && (gHitCount >= hitCount)) { return true; } return false; } void func_800A3FB0(void) { D_800D2F64 = 0.0f; } s32 Play_GetMaxShields(void) { if (gGoldRingCount[0] >= 3) { return 0x17F; } return 0xFF; } void func_800A3FEC(void) { Vec3f spC4; Vec3f spB8; Vtx* spB4; u16* spB0; s32 i; s32 spA8; f32* var_s3; f32* var_s5; f32* var_s4; f32* var_s0; f32* var_s1; f32 sp90; f32 sp8C; f32 sp88; f32 sp84; D_801782FC++; switch (gCurrentLevel) { case LEVEL_SOLAR: if (gFrameCount & 1) { spB4 = SEGMENTED_TO_VIRTUAL(D_6001C50); } else { spB4 = SEGMENTED_TO_VIRTUAL(D_6004500); } spB0 = SEGMENTED_TO_VIRTUAL(D_6022760); spA8 = 15; sp90 = 70.0f; sp8C = 0.1f; sp88 = 2.2f; sp84 = 0.5f; break; case LEVEL_ZONESS: if (gFrameCount & 1) { spB4 = SEGMENTED_TO_VIRTUAL(D_6009ED0); } else { spB4 = SEGMENTED_TO_VIRTUAL(D_600C780); } spB0 = SEGMENTED_TO_VIRTUAL(D_602AC50); spA8 = 7; sp90 = 40.0f; sp8C = 0.2f; sp88 = 1.0f; sp84 = 2.0f; break; } var_s3 = D_801782CC; var_s5 = D_801782D4; var_s4 = D_801782DC; var_s0 = D_801782E4; var_s1 = D_801782EC; for (i = 0; i < 17 * 17; i++, var_s3++, var_s5++, var_s4++, var_s0++, var_s1++, spB0++) { Math_SmoothStepToF(var_s3, *var_s5, sp8C, *var_s4, 0.0f); Math_SmoothStepToF(var_s4, 100.0f, 1.0f, sp84, 0.0f); if ((D_801782FC & spA8) == (i & spA8)) { *var_s5 = Rand_ZeroOne() * sp90; *var_s4 = 0.0f; } *var_s0 += *var_s1; *var_s1 -= 0.5f; if (*var_s0 < 0.0f) { *var_s1 = *var_s0 = 0.0f; } spB4[*spB0].n.ob[1] = (s16) *var_s3 + (s16) *var_s0; Matrix_RotateZ(gCalcMatrix, *var_s3 * sp88 * M_DTOR, 0); spC4.x = 120.0f; spC4.y = 0.0f; spC4.z = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &spC4, &spB8); spB4[*spB0].n.n[0] = spB8.x; spB4[*spB0].n.n[1] = spB8.y; spB4[*spB0].n.n[2] = spB8.z; } } void func_800A4460(Player* player) { if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) && (gObjects408[0].obj.status == 2) && (gObjects408[0].unk_04E == 17)) { player->unk_060 = __sinf(player->unk_0F4 * 0.7f * M_DTOR) * 0.5f; player->unk_088 += 13.0f; player->unk_0F4 += 20.0f; player->unk_080 = -__sinf(player->unk_088 * M_DTOR) * 5.0f; player->unk_0F0 = __sinf(player->unk_0F4 * M_DTOR) * 10.0f; return; } else { player->unk_060 = __sinf(player->unk_0F4 * 0.7f * M_DTOR) * 0.5f; player->unk_088 += 10.0f; player->unk_0F4 += 8.0f; if ((gLevelType == LEVELTYPE_PLANET) || ((player->unk_238 == 1) && (gLevelMode == LEVELMODE_ON_RAILS))) { player->unk_080 = -__sinf(player->unk_088 * M_DTOR) * 0.5f; if ((player->wings.rightState <= WINGSTATE_BROKEN) || (player->wings.leftState <= WINGSTATE_BROKEN)) { player->unk_0F0 = __sinf(player->unk_0F4 * M_DTOR) * 5.0f; } else { player->unk_0F0 = __sinf(player->unk_0F4 * M_DTOR) * 1.5f; } } } } void func_800A46A0(Player* player) { s32 var_v1; f32 sp40; if ((player->unk_238 == 0) || (gLevelMode == LEVELMODE_ALL_RANGE)) { if (player->wings.rightState <= WINGSTATE_BROKEN) { if (!(gFrameCount & 1) && (D_80177D70[player->num] != 0)) { func_8007D10C(((Rand_ZeroOne() - 0.5f) * 10.0f) + player->hit1.x, (Rand_ZeroOne() * 5.0f) + player->hit1.y, player->hit1.z, 1.0f); } if (!(gFrameCount & 1) && (Rand_ZeroOne() < 0.5f) && (!gVersusMode)) { func_8007C484(((Rand_ZeroOne() - 0.5f) * 5.0f) + player->hit1.x, (Rand_ZeroOne() * 5.0f) + player->hit1.y, player->hit1.z, player->vel.x, player->vel.y, player->vel.z, (Rand_ZeroOne() * 0.02f) + 0.02f, player->num + 1); } } if (player->wings.leftState <= WINGSTATE_BROKEN) { if (!(gFrameCount & 1) && (D_80177D88[player->num] != 0)) { func_8007D10C(((Rand_ZeroOne() - 0.5f) * 10.0f) + player->hit2.x, (Rand_ZeroOne() * 5.0f) + player->hit2.y, player->hit2.z, 1.0f); } if (!(gFrameCount & 1) && (Rand_ZeroOne() < 0.5f) && (!gVersusMode)) { func_8007C484(((Rand_ZeroOne() - 0.5f) * 5.0f) + player->hit2.x, (Rand_ZeroOne() * 5.0f) + player->hit2.y, player->hit2.z, player->vel.x, player->vel.y, player->vel.z, (Rand_ZeroOne() * 0.02f) + 0.02f, player->num + 1); } } } var_v1 = 7; if (player->shields < 0x40) { if (player->shields > 0x10) { var_v1 = 0xF; } if (player->shields > 0x20) { var_v1 = 0x1F; } if (player->shields > 0x30) { var_v1 = 0x3F; } if ((player->unk_238 == 0) || (gLevelMode == LEVELMODE_ALL_RANGE)) { sp40 = 0.0f; if (player->form == FORM_LANDMASTER) { sp40 = 30.0f; } if (!(gFrameCount & var_v1)) { func_8007D10C(((Rand_ZeroOne() - 0.5f) * 10.0f) + player->pos.x, (Rand_ZeroOne() * 10.0f) + (player->pos.y + sp40), ((Rand_ZeroOne() - 0.5f) * 10.0f) + player->unk_138, 2.2f); } if (!((var_v1 >> 2) & gFrameCount) && (Rand_ZeroOne() < 0.5f)) { func_8007C484(((Rand_ZeroOne() - 0.5f) * 30.0f) + player->pos.x, (Rand_ZeroOne() * 10.0f) + (player->pos.y + sp40), ((Rand_ZeroOne() - 0.5f) * 30.0f) + player->unk_138, player->vel.x, player->vel.y, player->vel.z, (Rand_ZeroOne() * 0.03f) + 0.04f, player->num + 1); if (player->timer_224 == 0) { player->timer_224 = 2; } } } else if (!((var_v1 >> 2) & gFrameCount) && (Rand_ZeroOne() < 0.5f) && (player->timer_224 == 0)) { player->timer_224 = 2; } } } void func_800A4C40(Player* player) { Vec3f sp54 = D_800D2F80; Vec3f sp48 = D_800D2F8C; Vec3f sp3C; Vec3f sp30; if (D_80161A88 == 2) { Matrix_Translate(gCalcMatrix, player->pos.x, player->pos.y, player->unk_138, 0); Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_4D8) * M_DTOR), 1); Matrix_RotateZ(gCalcMatrix, -(player->unk_0F8 * M_DTOR), 1); Matrix_MultVec3f(gCalcMatrix, &sp54, &sp3C); Matrix_MultVec3f(gCalcMatrix, &sp48, &sp30); if (player->pos.y < (D_80177940 + 100.0f)) { if ((sp3C.y < D_80177940 + 80.0f) && !(gFrameCount & 1)) { if (D_80161A64) {} func_8007ACE0(sp3C.x, D_80177940, sp3C.z, 0.1f, 2.0f, player->unk_0E8 + player->unk_114 + 20.0f); } if ((sp30.y < D_80177940 + 80.0f) && !(gFrameCount & 1)) { func_8007ACE0(sp30.x, D_80177940, sp30.z, 0.1f, 2.0f, player->unk_0E8 + player->unk_114 - 20.0f); } } if ((sp30.y < D_80177940 + 80.0f) || (sp3C.y < D_80177940 + 80.0f)) { if (D_80161A64 == 0) { D_80161A64 = 1; Audio_PlaySfx(0x1100000B, &player->unk_460, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } else { D_80161A64 = 0; func_8001A55C(&player->unk_460, 0x1100000B); } } } void func_800A4F4C(Object_58* obj58) { s32 i; u8* ptr = (u8*) obj58; for (i = 0; i < sizeof(Object_58); i++, ptr++) { *ptr = 0; } } void func_800A4F7C(void) { s16 temp_v0; s16 temp_v0_2; s32 var_s1; s32 var_s1_2; s32 i; s32 j; s32 var_s4_2; switch (gVersusStage) { case 0: D_80178310 = SEGMENTED_TO_VIRTUAL(D_302DE3C); break; case 1: D_80178310 = SEGMENTED_TO_VIRTUAL(D_302E0E4); break; case 2: if (D_801778AC == 2) { D_80178310 = SEGMENTED_TO_VIRTUAL(D_302E378); } else { D_80178310 = SEGMENTED_TO_VIRTUAL(D_302E170); } break; } for (i = 0, j = 0; i < 199; j++) { if (D_80178310[j].id <= OBJ_INVALID) { break; } if (D_80178310[j].id == OBJ_80_147) { func_800A4F4C(&gObjects58[i]); gObjects58[i].obj.status = 2; gObjects58[i].obj.id = D_80178310[j].id; gObjects58[i].obj.pos.x = D_80178310[j].xPos; gObjects58[i].obj.pos.z = D_80178310[j].zPos1; gObjects58[i].obj.pos.y = D_80178310[j].yPos; Object_SetInfo(&gObjects58[i].info, gObjects58[i].obj.id); i++; } } for (i = 5, j = 0; i < 199; j++) { if (D_80178310[j].id <= OBJ_INVALID) { break; } if (D_80178310[j].id != OBJ_80_147) { func_800A4F4C(&gObjects58[i]); gObjects58[i].obj.status = 2; gObjects58[i].obj.id = D_80178310[j].id; gObjects58[i].obj.pos.x = D_80178310[j].xPos; gObjects58[i].obj.pos.z = D_80178310[j].zPos1; gObjects58[i].obj.pos.y = D_80178310[j].yPos; gObjects58[i].obj.rot.y = D_80178310[j].unk_C; Object_SetInfo(&gObjects58[i].info, gObjects58[i].obj.id); i++; } } } void func_800A5330(void) { } void func_800A5338(void) { Object_4C* obj4C; Object_58* obj58; s32 i; s32 j; D_80178310 = SEGMENTED_TO_VIRTUAL(D_603B074); for (j = 0, obj58 = gObjects58; j < 200; j++) { if (D_80178310[j].id <= OBJ_INVALID) { break; } if (D_80178310[j].id < OBJ_4C_161) { func_800A4F4C(obj58); obj58->obj.status = 2; obj58->obj.id = D_80178310[j].id; obj58->obj.pos.x = D_80178310[j].xPos; obj58->obj.pos.z = D_80178310[j].zPos1; obj58->obj.pos.y = D_80178310[j].yPos; obj58->obj.rot.y = D_80178310[j].unk_C; Object_SetInfo(&obj58->info, obj58->obj.id); if (obj58->obj.id == OBJ_80_1) { obj58->info.dList = D_6020760; } obj58++; } } for (j = 0, obj4C = gObjects4C; j < ARRAY_COUNT(gObjects4C); j++) { if (D_80178310[j].id <= OBJ_INVALID) { break; } if (D_80178310[j].id == OBJ_4C_162) { Object_4C_Initialize(obj4C); obj4C->obj.status = 1; obj4C->obj.id = D_80178310[j].id; obj4C->obj.pos.x = D_80178310[j].xPos; obj4C->obj.pos.z = D_80178310[j].zPos1; obj4C->obj.pos.y = D_80178310[j].yPos; Object_SetInfo(&obj4C->info, obj4C->obj.id); obj4C++; } } i = 0; // fake? Object_408_Initialize(&gObjects408[i]); gObjects408[i].obj.status = 1; gObjects408[i].obj.pos.x = 0.0f; gObjects408[i].obj.pos.y = 0.0f; gObjects408[i].obj.pos.z = 0.0f; gObjects408[i].obj.id = OBJ_408_292; Object_SetInfo(&gObjects408[i].info, gObjects408[i].obj.id); } void func_800A55B0(void) { Object_58* obj58; s32 i; s32 j; D_80178310 = SEGMENTED_TO_VIRTUAL(D_6030B14); for (j = 0, obj58 = gObjects58; j < 200; j++) { if (D_80178310[j].id <= OBJ_INVALID) { break; } if (D_80178310[j].id < OBJ_4C_161) { func_800A4F4C(obj58); obj58->obj.status = 2; obj58->obj.id = D_80178310[j].id; obj58->obj.pos.x = D_80178310[j].xPos; obj58->obj.pos.z = D_80178310[j].zPos1; obj58->obj.pos.y = D_80178310[j].yPos; obj58->obj.rot.y = D_80178310[j].unk_C; Object_SetInfo(&obj58->info, obj58->obj.id); obj58++; } } i = 0; // fake? Object_408_Initialize(&gObjects408[i]); gObjects408[i].obj.status = 1; gObjects408[i].obj.pos.x = 0.0f; gObjects408[i].obj.pos.y = 0.0f; gObjects408[i].obj.pos.z = 0.0f; gObjects408[i].obj.id = OBJ_408_314; Object_SetInfo(&gObjects408[i].info, gObjects408[i].obj.id); i = 1; Object_408_Initialize(&gObjects408[i]); gObjects408[i].obj.status = 1; gObjects408[i].obj.pos.x = 0.0f; gObjects408[i].obj.pos.y = 0.0f; gObjects408[i].obj.pos.z = 0.0f; gObjects408[i].obj.id = OBJ_408_314; Object_SetInfo(&gObjects408[i].info, gObjects408[i].obj.id); i = 2; Object_408_Initialize(&gObjects408[i]); gObjects408[i].obj.status = 1; gObjects408[i].obj.pos.x = 0.0f; gObjects408[i].obj.pos.y = 0.0f; gObjects408[i].obj.pos.z = 0.0f; gObjects408[i].obj.id = OBJ_408_314; Object_SetInfo(&gObjects408[i].info, gObjects408[i].obj.id); } void func_800A57E0(void) { s32 i = 0; // fake? Object_408_Initialize(&gObjects408[i]); gObjects408[i].obj.status = 1; gObjects408[i].obj.pos.x = 0.0f; gObjects408[i].obj.pos.y = 0.0f; gObjects408[i].obj.pos.z = 0.0f; gObjects408[i].obj.id = OBJ_408_321; Object_SetInfo(&gObjects408[i].info, gObjects408[i].obj.id); } void func_800A5844(void) { s32 i; D_80178410 = 0; D_8017827C = 0; D_80161684 = 0; D_80161A50 = 0; gOverlayStage = 0; D_8015F924 = D_80177CA0 = 0; D_80177CB0 = 0.0f; gSavedHitCount = D_80177A80 = D_80177838 = D_80177840 = gRadioState = 0; D_8017782C = 1; if (((gCurrentLevel == LEVEL_VENOM_2) && (D_80161A2E == 2)) || (gCurrentLevel == LEVEL_VENOM_ANDROSS)) { return; } for (i = 1; i < 4; i++) { if (gSavedTeamShields[i] < 0) { if (gSavedTeamShields[i] == -1) { gSavedTeamShields[i] = 0; } } else if (gSavedTeamShields[i] == 0) { gSavedTeamShields[i] = 0xFF; } } } void func_800A594C(void) { if (gVersusMode) { switch (gVersusStage) { case 0: sEnvSettings = SEGMENTED_TO_VIRTUAL(D_302DD70); break; case 1: sEnvSettings = SEGMENTED_TO_VIRTUAL(D_302DDB4); break; case 2: sEnvSettings = SEGMENTED_TO_VIRTUAL(D_302DDF8); break; } } else { sEnvSettings = SEGMENTED_TO_VIRTUAL(D_800D2F98[gCurrentLevel]); } if (D_8017782C == 0) { if (gCurrentLevel == LEVEL_SOLAR) { func_8001D1C8(0xFF, 1); Audio_PlaySfx(0x4100C023, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); func_8001A55C(&gPlayer[0].unk_460, 0x3140807E); } } else if (gCurrentLevel == LEVEL_AQUAS) { sEnvSettings = SEGMENTED_TO_VIRTUAL(D_602E584); } D_80177C90 = sEnvSettings->seqId; gLevelType = sEnvSettings->type; D_801784AC = sEnvSettings->unk_04; gBgColor = sEnvSettings->bgColor; gFogRed = sEnvSettings->fogR; gFogGreen = sEnvSettings->fogG; gFogBlue = sEnvSettings->fogB; gFogNear = sEnvSettings->fogN; gFogFar = sEnvSettings->fogF; gLight1R = gLight2R = D_80161A70 = sEnvSettings->lightR; gLight1G = gLight2G = D_80161A74 = sEnvSettings->lightG; gLight1B = gLight2B = D_80161A78 = sEnvSettings->lightB; gAmbientR = sEnvSettings->ambR; gAmbientG = sEnvSettings->ambG; gAmbientB = sEnvSettings->ambB; D_801784D0 = D_801784F8 = D_80178520 = D_801784B8 = D_801784C4 = sEnvSettings->unk_20.x; D_801784D4 = D_801784FC = D_80178524 = D_801784BC = D_801784C8 = sEnvSettings->unk_20.y; D_801784D8 = D_80178500 = D_80178528 = D_801784C0 = D_801784CC = sEnvSettings->unk_20.z; D_80161A44 = 12800.0f; D_80178540 = 40; D_80178544 = 40; D_80161A3C = 45.0f; } void func_800A5D6C(void) { u32 i; MEM_ARRAY_ALLOCATE(D_80178288, 1000); MEM_ARRAY_ALLOCATE(D_80178290, 1000); MEM_ARRAY_ALLOCATE(D_80178298, 1000); Rand_SetSeed(1, 29000, 9876); for (i = 0; i < 1000; i++) { D_80178288[i] = (Rand_ZeroOneSeeded() * 480.0f) - 80.0f; D_80178290[i] = (Rand_ZeroOneSeeded() * 360.0f) - 60.0f; D_80178298[i] = FILL_COLOR(D_800C9C3C[i % ARRAY_COUNT(D_800C9C3C)]); } } void func_800A5EBC(void) { func_800A5D6C(); D_80177940 = -25000.0f; D_80178410 = 600; if (gCurrentLevel == LEVEL_AREA_6) { D_80178410 = 300; } if (gCurrentLevel == LEVEL_UNK_15) { D_80178410 = 400; } if (gGameState != GSTATE_PLAY) { D_80178410 = 800; } if (gCurrentLevel == LEVEL_FORTUNA) { D_80178410 = 500; } if (gVersusMode) { D_80178410 = 0; } if (gCurrentLevel == LEVEL_BOLSE) { D_80178410 = 300; D_80177940 = -0.0f; } if (gCurrentLevel == LEVEL_TRAINING) { D_80178410 = 800; D_80177940 = -0.0f; } } void func_800A5FA0(Vec3f* arg0, u32 arg1, s32 arg2) { if (!gVersusMode) { Audio_PlaySfx(arg1, arg0, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else { Audio_PlaySfx(arg1, arg0, arg2, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } void func_800A6028(Vec3f* arg0, u32 arg1) { Audio_PlaySfx(arg1, arg0, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } void func_800A6070(Vec3f* arg0, u32 arg1) { Audio_PlaySfx(arg1, arg0, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } void func_800A60B8(UnkEntity1C* unkEnt1C) { s32 i; u8* ptr = (u8*) unkEnt1C; for (i = 0; i < sizeof(UnkEntity1C); i++, ptr++) { *ptr = 0; } } void func_800A60E8(UnkEntity30* unkEnt30) { s32 i; u8* ptr = (u8*) unkEnt30; for (i = 0; i < sizeof(UnkEntity30); i++, ptr++) { *ptr = 0; } } void func_800A6118(UnkEntity28* unkEnt28) { s32 i; u8* ptr = (u8*) unkEnt28; for (i = 0; i < sizeof(UnkEntity28); i++, ptr++) { *ptr = 0; } } void func_800A6148(void) { s16 i; s16 j; for (i = 0; i < ARRAY_COUNT(gUnkEntities1C); i++) { func_800A60B8(&gUnkEntities1C[i]); } for (i = 0; i < ARRAY_COUNT(gUnkEntities28); i++) { func_800A6118(&gUnkEntities28[i]); } for (i = 0; i < ARRAY_COUNT(gUnkEntities30); i++) { func_800A60E8(&gUnkEntities30[i]); } for (i = 0; i < ARRAY_COUNT(gObjects80); i++) { Object_Kill(&gObjects80[i].obj, &gObjects80[i].sfxPos); Object_80_Initialize(&gObjects80[i]); } for (i = 0; i < ARRAY_COUNT(gObjects4C); i++) { Object_4C_Initialize(&gObjects4C[i]); } for (i = 0; i < ARRAY_COUNT(gObjects2F4); i++) { Object_Kill(&gObjects2F4[i].obj, &gObjects2F4[i].sfxPos); Object_2F4_Initialize(&gObjects2F4[i]); } for (i = 0; i < ARRAY_COUNT(gObjects408); i++) { Object_Kill(&gObjects408[i].obj, &gObjects408[i].sfxPos); Object_408_Initialize(&gObjects408[i]); } for (i = 0; i < ARRAY_COUNT(gObjects8C); i++) { Object_Kill(&gObjects8C[i].obj, &gObjects8C[i].sfxPos); Object_8C_Initialize(&gObjects8C[i]); } for (i = 0; i < ARRAY_COUNT(gItems); i++) { Object_Kill(&gItems[i].obj, &gItems[i].sfxPos); Item_Initialize(&gItems[i]); } for (i = 0; i < ARRAY_COUNT(gPlayerShots); i++) { Object_Kill(&gPlayerShots[i].obj, &gPlayerShots[i].sfxPos); PlayerShot_Initialize(&gPlayerShots[i]); } D_801782B8 = D_801782BC = D_801782C0 = D_801782D0 = D_80178284 = D_8017828C = D_8017812C = D_80177E70 = D_80177E78 = D_80177E80 = 0; D_80177F10.x = D_80177F10.y = D_80177F10.z = D_80177E88.x = D_80177E88.y = D_80177E88.z = 0.0f; for (i = 0; i < ARRAY_COUNT(D_80177E98); i++) { D_80177E98[i].x = D_80177E98[i].y = D_80177E98[i].z = 100.0f; } for (i = 0; i < ARRAY_COUNT(D_80176878); i++) { D_80176550[i] = 0; for (j = 0; j < ARRAY_COUNT(*D_80176878); j++) { D_80176878[i][j] = -5000.0f; } } } void func_800A6590(void) { if (D_80178340 != D_80178358) { if (D_80178340 < D_80178358) { D_80178340 += D_8017835C; if (D_80178340 >= D_80178358) { D_80178340 = D_80178358; } } else { D_80178340 -= D_8017835C; if (D_80178358 >= D_80178340) { D_80178340 = D_80178358; } } } D_8017835C = 16; Math_SmoothStepToF(&D_8017836C, 0.0f, 1.0f, 0.04f, 0.001f); if (D_Timer_80161A60 != 0) { D_Timer_80161A60--; if (D_Timer_80161A60 & 2) { D_80178348 = 255; D_80178350 = 255; D_80178354 = 255; D_80178340 = 254; } else { D_80178340 = 0; } } } void func_800A668C(f32 xPos, f32 yPos, f32 zPos) { s32 i; for (i = 0; i < ARRAY_COUNT(gPlayerShots); i++) { if (gPlayerShots[i].obj.status == 0) { PlayerShot_Initialize(&gPlayerShots[i]); gPlayerShots[i].obj.status = 2; gPlayerShots[i].unk_60 = 0; gPlayerShots[i].obj.pos.x = xPos; gPlayerShots[i].obj.pos.y = yPos; gPlayerShots[i].obj.pos.z = zPos; break; } } } void func_800A670C(Object_2F4* obj2F4, s32 arg1, f32 arg2, f32 arg3, f32 arg4) { Object_2F4_Initialize(obj2F4); obj2F4->obj.status = 1; obj2F4->obj.id = OBJ_2F4_189; obj2F4->unk_0B8 = arg1; obj2F4->obj.pos.x = arg2; obj2F4->obj.pos.y = arg3; obj2F4->obj.pos.z = arg4; obj2F4->unk_10C = 0.5f; if ((arg1 == 0) || (arg1 == 1)) { obj2F4->unk_0E8.y = (Rand_ZeroOne() * 5.0f) + 10.0f; obj2F4->unk_0E8.x = 10.0f; if (arg1 == 0) { obj2F4->unk_0E8.x = -10.0f; } obj2F4->timer_0BC = 15; } else { if (gLevelType == LEVELTYPE_PLANET) { obj2F4->unk_0E8.y = (Rand_ZeroOne() * 7.0f) + 7.0f; obj2F4->unk_0E8.x = (Rand_ZeroOne() - 0.5f) * 10.0f; obj2F4->unk_0E8.z = (Rand_ZeroOne() * 5.0f) + 5.0f; if (gLevelMode == LEVELMODE_ALL_RANGE) { obj2F4->unk_0E8.z = (Rand_ZeroOne() - 0.5f) * 10.0f; } obj2F4->timer_0BC = (s32) (Rand_ZeroOne() * 10.0f) + 10; } else { obj2F4->unk_0E8.x = (Rand_ZeroOne() - 0.5f) * 10.0f; obj2F4->unk_0E8.y = (Rand_ZeroOne() - 0.5f) * 10.0f; obj2F4->unk_0E8.z = (Rand_ZeroOne() - 0.5f) * 10.0f; obj2F4->timer_0BC = (s32) (Rand_ZeroOne() * 25.0f) + 25; obj2F4->unk_10C = 0.0f; } if (arg1 == 2) { obj2F4->scale = (Rand_ZeroOne() * 1.5f) + 0.75f; } else if (arg1 == 4) { obj2F4->scale = (Rand_ZeroOne() * 0.8f) + 0.3f; obj2F4->timer_0BC = (s32) (Rand_ZeroOne() * 50.0f) + 70; } obj2F4->obj.rot.x = Rand_ZeroOne() * 360.0f; } Object_SetInfo(&obj2F4->info, obj2F4->obj.id); } void func_800A69F8(s32 arg0, f32 arg1, f32 arg2, f32 arg3) { s32 i; if (!gVersusMode) { for (i = ARRAY_COUNT(gObjects2F4) - 1; i >= 10; i--) { if (gObjects2F4[i].obj.status == 0) { func_800A670C(&gObjects2F4[i], arg0, arg1, arg2, arg3); break; } } } } // has to be int. s32 and u32 don't match int func_800A6A74(void) { return gGoldRingCount[0] && gGoldRingCount[1] && gGoldRingCount[2] && gGoldRingCount[3]; } void Player_DamageWings(Player* player, s32 side, s32 damage) { if ((player->form == FORM_ARWING) && (D_80177AB8[player->num] < 1.0f)) { if (side == 1) { D_80177D40[player->num] = 30; if (player->wings.rightState == WINGSTATE_INTACT) { gRightWingHealth[player->num] -= damage; if (gRightWingHealth[player->num] <= 0) { func_800A69F8(1, player->hit1.x, player->hit1.y, player->hit1.z); player->wings.rightState = WINGSTATE_BROKEN; func_8007D0E0(player->hit1.x, player->hit1.y, player->hit1.z, 2.0f); D_80177D70[player->num] = 50; func_800A5FA0(&player->unk_460, 0x0900A02C, player->num); if (D_8015F90C == 0) { D_8015F90C = 1000; } } } } else if (side == 2) { D_80177D58[player->num] = 30; if (player->wings.leftState == WINGSTATE_INTACT) { gLeftWingHealth[player->num] -= damage; if (gLeftWingHealth[player->num] <= 0) { func_800A69F8(0, player->hit2.x, player->hit2.y, player->hit2.z); player->wings.leftState = WINGSTATE_BROKEN; func_8007D0E0(player->hit2.x, player->hit2.y, player->hit2.z, 2.0f); D_80177D88[player->num] = 50; func_800A5FA0(&player->unk_460, 0x0900A02C, player->num); if (D_8015F90C == 0) { D_8015F90C = 1000; } } } } } } void Player_ApplyDamage(Player* player, s32 direction, s32 damage) { Vec3f sp44; Vec3f sp38; f32 sp34 = 20.0f; player->unk_1A4 = damage; player->unk_21C = direction; if ((damage == 39) || (damage == 41) || (damage == 42) || (damage == 43)) { damage = 40; } if (gExpertMode) { player->damage = damage * 2; } else { player->damage = damage; } if (player->damage != 0) { player->timer_220 = 4; } player->unk_284 = 0; player->unk_1F4 = 20; if (player->unk_1A4 > 40) { sp34 = (player->unk_110 * 0.3f) + 20.0f; player->timer_498 = 5; } else if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) && (D_80178284 == 0)) { player->timer_498 = 3; } else if ((gCurrentLevel == LEVEL_VENOM_1) || (gCurrentLevel == LEVEL_AQUAS)) { player->timer_498 = 5; } else { player->timer_498 = 20; } if (D_80177AD0[player->num] != 0) { func_800A5FA0(&player->unk_460, 0x0903900E, player->num); D_80177AE8[player->num] = 5; D_80177AB8[player->num] = 2.0f; player->damage = 0; } else { if (player->shields != 0) { if (player->shields < 50) { Audio_PlaySfx(0x49008011, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else if (player->shields < 100) { Audio_PlaySfx(0x49008010, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } if (damage < 25) { func_800A5FA0(&player->unk_460, 0x0903900E, player->num); } else { func_800A5FA0(&player->unk_460, 0x0903A00F, player->num); } } Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, player->unk_0F8 * M_DTOR, 1); sp44.z = 0.0f; switch (player->unk_21C) { case 0: player->timer_224 = 20; player->unk_0D8.x = 0.f; player->unk_0D8.y = 0.f; player->unk_0D8.z = 0.f; break; case 1: sp44.x = -sp34; sp44.y = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->unk_0D8.x = sp38.x; player->unk_0D8.y = sp38.y; player->unk_0D8.z = sp38.z; func_800A668C(player->hit1.x - player->vel.x, player->hit1.y, player->hit1.z - player->vel.z); Player_DamageWings(player, 1, 20); break; case 2: sp44.x = sp34; sp44.y = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->unk_0D8.x = sp38.x; player->unk_0D8.y = sp38.y; player->unk_0D8.z = sp38.z; func_800A668C(player->hit2.x - player->vel.x, player->hit2.y, player->hit2.z - player->vel.z); Player_DamageWings(player, 2, 20); break; case 3: player->timer_224 = 20; func_800A668C(player->hit3.x - player->vel.x, player->hit3.y, player->hit3.z - player->vel.z); if (player->form != FORM_LANDMASTER) { sp44.x = 0.0f; sp44.y = -sp34; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->unk_0D8.x = sp38.x; player->unk_0D8.y = sp38.y; player->unk_0D8.z = sp38.z; } if (Rand_ZeroOne() < 0.5f) { Player_DamageWings(player, 1, 15); } else { Player_DamageWings(player, 2, 15); } break; case 4: player->timer_224 = 20; func_800A668C(player->hit4.x - player->vel.x, player->hit4.y, player->hit4.z - player->vel.z); sp44.x = 0.0f; sp44.y = sp34; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->unk_0D8.x = sp38.x; player->unk_0D8.y = sp38.y; player->unk_0D8.z = sp38.z; if (Rand_ZeroOne() < 0.5f) { Player_DamageWings(player, 1, 15); } else { Player_DamageWings(player, 2, 15); } break; } if ((gCurrentLevel == LEVEL_VENOM_1) && (player->unk_1A4 == 42)) { if (player->pos.x > 0.0f) { player->unk_0D8.x = -30.0f; } else { player->unk_0D8.x = 30.0f; } player->timer_498 = 10; } } void func_800A729C(Player* player, u32 arg1, f32 arg2, f32 arg3) { player->unk_21C = arg1; switch (arg1) { case 1: case 2: player->pos.x = player->unk_090.x; player->unk_0D8.x = 0.0f; player->pos.x += D_800D2FEC[player->unk_21C]; if (player->form == FORM_LANDMASTER) { player->pos.x -= D_800D2FEC[player->unk_21C]; } Math_SmoothStepToF(&player->unk_0D0, 2.0f, 1.0f, 2.0f, 0.00001f); break; case 3: case 4: player->pos.z = player->unk_090.z; player->unk_0D8.z = 0.0f; player->pos.z += D_800D2FEC[player->unk_21C]; if (player->form == FORM_LANDMASTER) { player->pos.z += D_800D2FEC[player->unk_21C]; } player->unk_138 = player->pos.z; Math_SmoothStepToF(&player->unk_0D0, 2.0f, 1.0f, 2.0f, 0.00001f); break; case 0: case 5: break; } } bool func_800A73E4(f32* arg0, s32* arg1, f32 posX, f32 posY, f32 posZ) { Vtx* spA4; u16* spA0; s32 sp9C; s32 sp98; f32 sp94; f32 sp90; s32 sp8C; f32 x0; f32 y0; f32 z0; f32 x1; f32 y1; f32 z1; f32 x2; f32 y2; f32 z2; f32 temp1; f32 dz21; f32 dx10; f32 dx21; f32 dy10; f32 dy21; f32 dz10; f32 sp48; f32 crz; f32 cry; f32 crx; switch (gCurrentLevel) { case LEVEL_SOLAR: spA4 = SEGMENTED_TO_VIRTUAL(D_6001C50); spA0 = SEGMENTED_TO_VIRTUAL(D_6022760); break; case LEVEL_ZONESS: spA4 = SEGMENTED_TO_VIRTUAL(D_6009ED0); spA0 = SEGMENTED_TO_VIRTUAL(D_602AC50); break; default: return false; } sp9C = (s32) ((posX + 2400.0f) / 300.0f); sp98 = (s32) ((posZ + D_80177D20 + 1500.0f + 2400.0f) / 300.0f); if ((sp9C < 0) || (sp9C >= 16) || (sp98 < 0) || (sp98 >= 16)) { return 0; } sp90 = Math_ModF(posX + 2400.0f, 300.0f); sp94 = Math_ModF(posZ + D_80177D20 + 1500.0f + 2400.0f, 300.0f); sp8C = (sp98 * 17) + sp9C; x0 = spA4[spA0[sp8C]].n.ob[0] * 3.0f; y0 = spA4[spA0[sp8C]].n.ob[1] * 2.0f; z0 = spA4[spA0[sp8C]].n.ob[2] * 3.0f; if (sp90 < sp94) { x1 = spA4[spA0[sp8C + 18]].n.ob[0] * 3.0f; y1 = spA4[spA0[sp8C + 18]].n.ob[1] * 2.0f; z1 = spA4[spA0[sp8C + 18]].n.ob[2] * 3.0f; x2 = spA4[spA0[sp8C + 17]].n.ob[0] * 3.0f; y2 = spA4[spA0[sp8C + 17]].n.ob[1] * 2.0f; z2 = spA4[spA0[sp8C + 17]].n.ob[2] * 3.0f; } else { x1 = spA4[spA0[sp8C + 1]].n.ob[0] * 3.0f; y1 = spA4[spA0[sp8C + 1]].n.ob[1] * 2.0f; z1 = spA4[spA0[sp8C + 1]].n.ob[2] * 3.0f; x2 = spA4[spA0[sp8C + 18]].n.ob[0] * 3.0f; y2 = spA4[spA0[sp8C + 18]].n.ob[1] * 2.0f; z2 = spA4[spA0[sp8C + 18]].n.ob[2] * 3.0f; } dx10 = x1 - x0; dx21 = x2 - x1; dy10 = y1 - y0; dy21 = y2 - y1; dz10 = z1 - z0; dz21 = z2 - z1; crx = (dy10 * dz21) - (dz10 * dy21); cry = (dz10 * dx21) - (dx10 * dz21); crz = (dx10 * dy21) - (dy10 * dx21); temp1 = -crx * x0 - cry * y0 - crz * z0; sp48 = (-temp1 - crx * posX - crz * (posZ + D_80177D20 + 1500.0f)) / cry; if (posY < sp48) { *arg0 = sp48; *arg1 = sp8C; return true; } return false; } s32 func_800A78C4(Hitbox* hitbox, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6) { if ((fabsf(hitbox->z.offset + arg3 - arg6) < (hitbox->z.size + D_8017853C)) && (fabsf(hitbox->x.offset + arg1 - arg4) < (hitbox->x.size + D_8017853C)) && (fabsf(hitbox->y.offset + arg2 - arg5) < (hitbox->y.size + D_8017853C))) { return true; } return false; } s32 func_800A7974(Player* player, f32* hitboxData, s32* index, f32 xPos, f32 yPos, f32 zPos, f32 xRot, f32 yRot, f32 zRot, f32 arg9, f32 argA, f32 argB) { s32 count; s32 i; f32 var_fv0; f32 var_fv1; f32 var_fa0; f32 spA0; Vec3f sp94; Vec3f sp88; count = *hitboxData; if (count != 0) { hitboxData++; for (i = 0; i < count; i++, hitboxData += 6) { spA0 = 0; if (*hitboxData == HITBOX_UNK_2) { Matrix_RotateZ(gCalcMatrix, -hitboxData[3] * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -hitboxData[1] * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -hitboxData[2] * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, -zRot * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, -xRot * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -yRot * M_DTOR, 1); hitboxData += 4; spA0 = 1; } else { if (*hitboxData >= HITBOX_UNK_3) { hitboxData++; } Matrix_RotateZ(gCalcMatrix, -zRot * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -xRot * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -yRot * M_DTOR, 1); } if (!((arg9 == 0) && (argA == 0) && (argB == 0))) { Matrix_RotateZ(gCalcMatrix, -argB * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, -arg9 * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -argA * M_DTOR, 1); } if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) { var_fv0 = player->hit4.x; var_fv1 = player->hit4.y; var_fa0 = player->hit4.z; } else { sp94.x = player->hit4.x - xPos; sp94.y = player->hit4.y - yPos; sp94.z = player->hit4.z - zPos; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88); var_fv0 = sp88.x + xPos; var_fv1 = sp88.y + yPos; var_fa0 = sp88.z + zPos; } if (func_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) { *index = i + 1; if (hitboxData[-1] == HITBOX_UNK_3) { return -1; } if (hitboxData[-1] == HITBOX_UNK_4) { return -2; } return 3; } if (hitboxData[-1] < HITBOX_UNK_3) { if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) { var_fv0 = player->hit3.x; var_fv1 = player->hit3.y; var_fa0 = player->hit3.z; } else { sp94.x = player->hit3.x - xPos; sp94.y = player->hit3.y - yPos; sp94.z = player->hit3.z - zPos; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88); var_fv0 = sp88.x + xPos; var_fv1 = sp88.y + yPos; var_fa0 = sp88.z + zPos; } if (func_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) { *index = i + 1; return 4; } if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) { var_fv0 = player->hit1.x; var_fv1 = player->hit1.y; var_fa0 = player->hit1.z; } else { sp94.x = player->hit1.x - xPos; sp94.y = player->hit1.y - yPos; sp94.z = player->hit1.z - zPos; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88); var_fv0 = sp88.x + xPos; var_fv1 = sp88.y + yPos; var_fa0 = sp88.z + zPos; } if (func_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) { *index = i + 1; return 1; } if ((yRot == 0.0f) && (zRot == 0.0f) && (xRot == 0.0f) && (spA0 == 0)) { var_fv0 = player->hit2.x; var_fv1 = player->hit2.y; var_fa0 = player->hit2.z; } else { sp94.x = player->hit2.x - xPos; sp94.y = player->hit2.y - yPos; sp94.z = player->hit2.z - zPos; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp94, &sp88); var_fv0 = sp88.x + xPos; var_fv1 = sp88.y + yPos; var_fa0 = sp88.z + zPos; } if (func_800A78C4((Hitbox*) hitboxData, xPos, yPos, zPos, var_fv0, var_fv1, var_fa0)) { *index = i + 1; return 2; } } } } return 0; } bool func_800A8054(s32 objId, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, Vec3f* arg7, Vec3f* arg8) { Vec3f sp54; Vec3f sp48; Vec3f sp3C; f32 pad1; f32 sp34; s32 var_s0; s32 var_v0; sp54.x = arg4; sp54.y = arg5; sp54.z = arg6; sp48.x = arg1; sp48.y = arg2; sp48.z = arg3; var_v0 = false; switch (objId) { case OBJ_2F4_180: var_s0 = 0; break; case OBJ_80_4: case OBJ_80_5: var_s0 = 1; var_v0 = true; break; case OBJ_80_149: var_s0 = 5; break; case OBJ_80_150: var_s0 = 6; break; case OBJ_408_308: var_s0 = 4; break; case OBJ_408_312: var_s0 = 9; break; case OBJ_408_309: var_s0 = 7; break; case OBJ_UNK_1000: var_s0 = 3; break; case OBJ_408_313: var_s0 = 8; break; case OBJ_80_39: var_s0 = 1; break; case OBJ_80_120: var_s0 = 18; var_v0 = true; break; case OBJ_80_124: var_s0 = 15; var_v0 = true; break; case OBJ_80_126: var_s0 = 16; var_v0 = true; break; case OBJ_80_47: var_s0 = 7; var_v0 = true; break; case OBJ_80_2: var_s0 = 2; var_v0 = true; break; case OBJ_80_3: case OBJ_80_69: var_s0 = 3; var_v0 = true; break; case OBJ_80_143: var_s0 = 17; var_v0 = true; break; case OBJ_80_140: var_s0 = 4; var_v0 = true; break; case OBJ_80_141: var_s0 = 6; var_v0 = true; break; case OBJ_80_117: var_s0 = 14; var_v0 = true; break; case OBJ_80_70: var_s0 = 8; var_v0 = true; break; case OBJ_80_72: var_s0 = 9; var_v0 = true; break; case OBJ_80_71: var_s0 = 10; var_v0 = true; break; case OBJ_80_73: var_s0 = 11; var_v0 = true; break; case OBJ_80_67: var_s0 = 12; var_v0 = true; break; case OBJ_80_74: var_s0 = 13; var_v0 = true; break; case OBJ_80_118: case OBJ_80_119: case OBJ_80_121: case OBJ_80_122: case OBJ_80_123: case OBJ_80_125: case OBJ_80_127: case OBJ_80_128: case OBJ_80_129: case OBJ_80_130: case OBJ_80_131: case OBJ_80_132: case OBJ_80_133: case OBJ_80_134: case OBJ_80_135: case OBJ_80_136: case OBJ_80_137: case OBJ_80_138: case OBJ_80_139: case OBJ_80_142: case OBJ_80_144: case OBJ_80_145: case OBJ_80_146: case OBJ_80_147: case OBJ_80_148: case OBJ_80_40: case OBJ_80_41: case OBJ_80_42: case OBJ_80_43: case OBJ_80_44: case OBJ_80_45: case OBJ_80_46: case OBJ_80_48: case OBJ_80_49: case OBJ_80_50: case OBJ_80_51: case OBJ_80_52: case OBJ_80_53: case OBJ_80_54: case OBJ_80_55: case OBJ_80_56: case OBJ_80_57: case OBJ_80_58: case OBJ_80_59: case OBJ_80_60: case OBJ_80_61: case OBJ_80_62: case OBJ_80_63: case OBJ_80_64: case OBJ_80_65: case OBJ_80_66: case OBJ_80_68: default: var_s0 = 0; var_v0 = true; break; } if (!var_v0) { if (func_800998FC(&sp54, &sp48, arg8, var_s0, &sp3C, &sp34) > 0) { return true; } } else { if (func_800A3690(&sp54, &sp48, var_s0, arg7)) { return true; } } return false; } // arg5 could be Vec3f (not Vec3f*) s32 func_800A8304(Player* player, s32 objId, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) { Vec3f sp84; Vec3f sp78; Vec3f sp6C; Vec3f sp60; Vec3f sp54; sp84.x = arg2; sp84.y = arg3; sp84.z = arg4; Matrix_RotateY(gCalcMatrix, -arg6 * M_DTOR, 0); sp78.x = player->vel.x; sp78.y = player->vel.y; sp78.z = player->vel.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp54); if ((player->form == FORM_LANDMASTER) || (player->form == FORM_ON_FOOT)) { sp78.x = player->pos.x - sp84.x; sp78.y = player->pos.y - sp84.y; sp78.z = player->unk_138 - sp84.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp6C); if (func_800A8054(objId, sp84.x, sp84.y, sp84.z, sp6C.x + sp84.x, sp6C.y + sp84.y, sp6C.z + sp84.z, &sp60, &sp54)) { player->pos.y = sp60.y; player->unk_104 = Math_RadToDeg(sp60.x); player->unk_10C = Math_RadToDeg(sp60.z); player->vel.y = 0.0f; if (player->form == FORM_ON_FOOT) { player->vel.y = -5.0f; } player->unk_1D4 = 1; return 5; } return 0; } sp78.x = player->hit4.x - sp84.x; sp78.y = player->hit4.y - sp84.y; sp78.z = player->hit4.z - sp84.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp6C); if (func_800A8054(objId, sp84.x, sp84.y, sp84.z, sp6C.x + sp84.x, sp6C.y + sp84.y, sp6C.z + sp84.z, &sp60, &sp54)) { return 3; } sp78.x = player->hit3.x - sp84.x; sp78.y = player->hit3.y - sp84.y; sp78.z = player->hit3.z - sp84.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp6C); if (func_800A8054(objId, sp84.x, sp84.y, sp84.z, sp6C.x + sp84.x, sp6C.y + sp84.y, sp6C.z + sp84.z, &sp60, &sp54)) { return 4; } sp78.x = player->hit1.x - sp84.x; sp78.y = player->hit1.y - sp84.y; sp78.z = player->hit1.z - sp84.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp6C); if (func_800A8054(objId, sp84.x, sp84.y, sp84.z, sp6C.x + sp84.x, sp6C.y + sp84.y, sp6C.z + sp84.z, &sp60, &sp54)) { return 1; } sp78.x = player->hit2.x - sp84.x; sp78.y = player->hit2.y - sp84.y; sp78.z = player->hit2.z - sp84.z; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp78, &sp6C); if (func_800A8054(objId, sp84.x, sp84.y, sp84.z, sp6C.x + sp84.x, sp6C.y + sp84.y, sp6C.z + sp84.z, &sp60, &sp54)) { return 2; } return 0; } void func_800A86E4(Player* player) { s32 i; Item* item; s32 sp6C; for (i = 0, item = gItems; i < ARRAY_COUNT(gItems); i++, item++) { if ((item->obj.status == 2) && ((player->state_1C8 == PLAYERSTATE_1C8_3) || (player->state_1C8 == PLAYERSTATE_1C8_5)) && (item->timer_4A == 0) && func_800A7974(player, item->info.hitbox, &sp6C, item->obj.pos.x, item->obj.pos.y, item->obj.pos.z, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f)) { item->unk_4C = 1; item->unk_4E = gPlayerNum; } } } void func_800A8804(Player* playerA, Player* playerB) { if (playerA->timer_498 == 0) { Player_ApplyDamage(playerA, 0, D_800D3000[playerA->form][playerB->form]); playerA->unk_288 = playerB->num + 1; playerB->unk_288 = playerA->num + 1; } } void func_800A887C(Player* player) { Vec3f sp3C; Matrix_Translate(gCalcMatrix, player->pos.x, player->pos.y, player->unk_138, 0); if (player->form == FORM_LANDMASTER) { player->unk_10C = 0.0f; player->unk_104 = 0.0f; sp3C.x = -40.0f; sp3C.y = 40.0f; sp3C.z = 0.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit2); sp3C.x = 40.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit1); sp3C.x = 0.0f; sp3C.z = -40.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit4); sp3C.z = 40.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit3); } if ((player->form == FORM_ON_FOOT) || (player->form == FORM_UNK_4)) { sp3C.x = 20.0f; sp3C.y = 20.0f; sp3C.z = 0.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit2); sp3C.x = -20.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit1); sp3C.x = 0.0f; sp3C.z = -20.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit4); sp3C.z = 20.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit3); } if ((player->form == FORM_ARWING) || (player->form == FORM_BLUE_MARINE)) { Matrix_RotateY(gCalcMatrix, (player->unk_114 + 180.0f) * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, -(player->unk_0F8 * M_DTOR), 1); sp3C.y = 0.0f; sp3C.z = 0.0f; if (player->wings.leftState == WINGSTATE_INTACT) { sp3C.x = 40.0f; } else { sp3C.y = -10.0f; sp3C.x = 30.0f; } if (player->form == FORM_BLUE_MARINE) { sp3C.x = 24.0f; } Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit2); if (player->wings.rightState == WINGSTATE_INTACT) { sp3C.x = -40.0f; } else { sp3C.x = -30.0f; } if (player->form == FORM_BLUE_MARINE) { sp3C.x = -24.0f; } Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit1); sp3C.x = 0.0f; sp3C.y = 24.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit4); sp3C.y = -24.0f; Matrix_MultVec3f(gCalcMatrix, &sp3C, &player->hit3); } } void func_800A8BA4(Player* player) { s32 i; s32 j; s32 temp_v0; f32 spE8; f32 spE4; f32 spE0; Vec3f spfD4; Vec3f spC8; Vec3f spBC; f32 padB8; // B8 Object_2F4* obj2F4; // B4 f32 padB0; // B0 Object_408* obj408; // AC Object_4C* obj4C; // A8 s32 pad; // A4 Object_80* obj80; // A0 Player* opponent; // 9C s32 sp98; f32 sp94; s32 sp90; f32 sp8C; func_800A887C(player); if (D_801784AC == 4) { switch (player->form) { case FORM_LANDMASTER: func_800444BC(player); break; case FORM_BLUE_MARINE: if (func_E6A810_801B6AEC(player->pos.x, player->pos.y - 12.0f, player->unk_138 + player->unk_144) != 0) { func_E6A810_801B6E20(player->pos.x, player->unk_138 + player->unk_144, &spE8, &spE0, &spE4); player->pos.y = spE0 + 10.0f; } break; } } else if (player->form == FORM_ARWING) { if ((player->hit1.y < (D_80177940 + 13.0f)) && (player->state_1C8 != PLAYERSTATE_1C8_4)) { if (D_80161A88 == 2) { player->unk_1F4 = 7; player->unk_0E4 = (player->unk_0D0 + player->unk_110) * 0.5f; } else { Player_ApplyDamage(player, 1, 21); } if (gCurrentLevel == LEVEL_FORTUNA) { func_8007BC7C(player->hit1.x, player->hit1.y, player->hit1.z, 6.0f); func_8007BC7C(player->hit1.x, player->hit1.y, player->hit1.z, 6.0f); func_8007BC7C(player->hit1.x, player->hit1.y, player->hit1.z, 6.0f); } } if ((player->hit2.y < (D_80177940 + 13.0f)) && (player->state_1C8 != PLAYERSTATE_1C8_4)) { if (D_80161A88 == 2) { player->unk_1F4 = 7; player->unk_0E4 = (player->unk_0D0 + player->unk_110) * 0.5f; } else { Player_ApplyDamage(player, 2, 21); } if (gCurrentLevel == LEVEL_FORTUNA) { func_8007BC7C(player->hit2.x, player->hit2.y, player->hit2.z, 6.0f); func_8007BC7C(player->hit2.x, player->hit2.y, player->hit2.z, 6.0f); func_8007BC7C(player->hit2.x, player->hit2.y, player->hit2.z, 6.0f); } } } else if ((player->form == FORM_LANDMASTER) && (!gVersusMode)) { func_800444BC(player); } if ((player->timer_498 == 0) || ((gCamCount != 1) && (player->form != FORM_ARWING))) { if (gLevelMode == LEVELMODE_ALL_RANGE) { Object_58* obj58; sp8C = 1100.0f; if ((gCurrentLevel == LEVEL_SECTOR_Y) || (gCurrentLevel == LEVEL_VENOM_ANDROSS)) { sp8C = 4000.0f; } for (i = 0, obj58 = gObjects58; i < 200; i++, obj58++) { if (obj58->obj.status == 2) { spC8.x = obj58->obj.pos.x - player->pos.x; spC8.z = obj58->obj.pos.z - player->unk_138; if (sqrtf(SQ(spC8.x) + SQ(spC8.z)) < sp8C) { if ((obj58->obj.id == OBJ_80_117) || (obj58->obj.id == OBJ_80_143) || (obj58->obj.id == OBJ_80_141) || (obj58->obj.id == OBJ_80_149) || (obj58->obj.id == OBJ_80_150) || (obj58->obj.id == OBJ_80_148) || (obj58->obj.id == OBJ_80_160) || (obj58->obj.id == OBJ_80_1) || (obj58->obj.id == OBJ_80_3) || (obj58->obj.id == OBJ_80_140)) { temp_v0 = func_800A8304(player, obj58->obj.id, obj58->obj.pos.x, obj58->obj.pos.y, obj58->obj.pos.z, obj58->obj.rot.x, obj58->obj.rot.y, obj58->obj.rot.z); if (temp_v0 != 0) { if ((player->form == FORM_LANDMASTER) || (player->form == FORM_ON_FOOT)) { func_800A729C(player, temp_v0, obj58->obj.pos.x, obj58->obj.pos.z); } else { Player_ApplyDamage(player, temp_v0, obj58->info.damage); } } if ((gCurrentLevel == LEVEL_FORTUNA) || (gCurrentLevel == LEVEL_VENOM_2)) { temp_v0 = func_800A7974(player, obj58->info.hitbox, &sp98, obj58->obj.pos.x, obj58->obj.pos.y, obj58->obj.pos.z, obj58->obj.rot.x, obj58->obj.rot.y, obj58->obj.rot.z, 0.0f, 0.0f, 0.0f); if ((temp_v0 != 0) && (temp_v0 < 0)) { if (player->unk_22C == 0) { func_8007A6F0(&obj58->obj.pos, 0x19000001); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } } } else { temp_v0 = func_800A7974(player, obj58->info.hitbox, &sp98, obj58->obj.pos.x, obj58->obj.pos.y, obj58->obj.pos.z, obj58->obj.rot.x, obj58->obj.rot.y, obj58->obj.rot.z, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { if (temp_v0 < 0) { if (player->unk_22C == 0) { func_8007A6F0(&obj58->obj.pos, 0x19000001); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else if ((player->form == FORM_LANDMASTER) || (player->form == FORM_ON_FOOT)) { func_800A729C(player, temp_v0, obj58->obj.pos.x, obj58->obj.pos.z); } else { Player_ApplyDamage(player, temp_v0, obj58->info.damage); if (obj58->obj.id == OBJ_80_131) { Matrix_RotateY(gCalcMatrix, (obj58->obj.rot.y + 180.0f) * M_DTOR, 0); Matrix_MultVec3f(gCalcMatrix, &D_800D3040[sp98 - 1], &spBC); player->unk_0D8.x = spBC.x; player->unk_0D8.y = spBC.y; player->unk_0D8.z = spBC.z; player->unk_0E8 = player->unk_0E4 = 0.0f; player->pos.x = player->unk_090.x; player->pos.y = player->unk_090.y; player->pos.z = player->unk_090.z; player->unk_114 = obj58->obj.rot.y + 180.0f; player->timer_498 = 5; } if ((obj58->obj.id == OBJ_80_135) || (obj58->obj.id == OBJ_80_136)) { if (obj58->obj.id == OBJ_80_135) { Matrix_RotateY(gCalcMatrix, (obj58->obj.rot.y + 180.0f) * M_DTOR, 0); Matrix_MultVec3f(gCalcMatrix, &D_800D3088[sp98 - 1], &spBC); } else { Matrix_RotateY(gCalcMatrix, obj58->obj.rot.y * M_DTOR, 0); Matrix_MultVec3f(gCalcMatrix, &D_800D30B8[sp98 - 1], &spBC); } player->unk_0D8.x = spBC.x; player->unk_0D8.y = spBC.y; player->unk_0D8.z = spBC.z; player->unk_0E8 = 0.0f; player->unk_0E4 = 0.0f; player->pos.x = player->unk_090.x; player->pos.y = player->unk_090.y; player->pos.z = player->unk_090.z; if (obj58->obj.id == OBJ_80_135) { player->unk_114 = obj58->obj.rot.y + 180.0f; } else { player->unk_114 = obj58->obj.rot.y; } player->timer_498 = 5; } } } } } } } } else { for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) { if ((obj80->obj.status == 2) && (obj80->obj.id != OBJ_80_58) && (obj80->obj.id != OBJ_80_105) && (obj80->obj.id != OBJ_80_59) && (obj80->obj.id != OBJ_80_60) && (obj80->obj.id != OBJ_80_61) && (obj80->obj.id != OBJ_80_66) && (obj80->obj.id != OBJ_80_67) && (obj80->obj.id != OBJ_80_70) && (obj80->obj.id != OBJ_80_72) && (obj80->obj.id != OBJ_80_71) && (obj80->obj.id != OBJ_80_73) && (obj80->obj.id != OBJ_80_74) && (obj80->obj.id != OBJ_80_69) && ((player->unk_138 - 2000.0f) < obj80->obj.pos.z)) { if ((obj80->obj.id == OBJ_80_1) || (obj80->obj.id == OBJ_80_4) || (obj80->obj.id == OBJ_80_5) || (obj80->obj.id == OBJ_80_47) || (obj80->obj.id == OBJ_80_117) || (obj80->obj.id == OBJ_80_120) || (obj80->obj.id == OBJ_80_124) || (obj80->obj.id == OBJ_80_126) || (obj80->obj.id == OBJ_80_2) || (obj80->obj.id == OBJ_80_3)) { spC8.x = obj80->obj.pos.x - player->pos.x; spC8.z = obj80->obj.pos.z - player->unk_138; if (sqrtf(SQ(spC8.x) + SQ(spC8.z)) < 1100.0f) { temp_v0 = func_800A8304(player, obj80->obj.id, obj80->obj.pos.x, obj80->obj.pos.y, obj80->obj.pos.z, obj80->obj.rot.x, obj80->obj.rot.y, obj80->obj.rot.z); if (temp_v0 != 0) { Player_ApplyDamage(player, temp_v0, obj80->info.damage); } } } else { padB0 = obj80->obj.rot.y; if (obj80->info.action == (ObjectFunc) func_80066EA8) { padB0 = 0.0f; } temp_v0 = func_800A7974(player, obj80->info.hitbox, &sp98, obj80->obj.pos.x, obj80->obj.pos.y, obj80->obj.pos.z, obj80->obj.rot.x, padB0, obj80->obj.rot.z, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { if (temp_v0 < 0) { if (temp_v0 == -1) { D_80178540 = 40; D_80178570 = 20; D_80178574 = 20; D_80178578 = 20; player->unk_23C = 0x50; } if (player->unk_22C == 0) { Audio_PlaySfx(0x19000001, &obj80->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else if (obj80->obj.id == OBJ_80_54) { if (player->unk_22C == 0) { Audio_PlaySfx(0x19832019, &obj80->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else { Player_ApplyDamage(player, temp_v0, obj80->info.damage); if ((obj80->obj.id == OBJ_80_48) || (obj80->obj.id == OBJ_80_55) || (obj80->obj.id == OBJ_80_49)) { Matrix_RotateY(gCalcMatrix, obj80->obj.rot.y * M_DTOR, 0); spC8.x = -(player->unk_0D0 + player->unk_110) * 0.7f; spC8.y = 0.0f; spC8.z = 0.0f; Matrix_MultVec3f(gCalcMatrix, &spC8, &spBC); player->unk_0D8.x = spBC.x; player->unk_0D8.y = spBC.y; player->pos.x = player->unk_090.x; player->timer_498 = 5; } else if (obj80->obj.id == OBJ_80_50) { if (player->pos.x < obj80->obj.pos.x) { player->unk_0D8.x = -30.0f; player->unk_0E8 = 45.0f; } else { player->unk_0D8.x = 30.0f; player->unk_0E8 = -45.0f; } player->unk_0D8.y = 0.0f; player->pos.x = player->unk_090.x; player->timer_498 = 5; } else if (obj80->obj.id == OBJ_80_131) { Matrix_RotateY(gCalcMatrix, (obj80->obj.rot.y + 180.0f) * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, -obj80->obj.rot.z * M_DTOR, 1); Matrix_MultVec3f(gCalcMatrix, &D_800D3040[sp98 - 1], &spBC); player->unk_0D8.x = spBC.x; player->unk_0D8.y = spBC.y; player->unk_0E8 = 0.0f; player->unk_0E4 = 0.0f; player->timer_498 = 5; player->pos.x = player->unk_090.x; player->pos.y = player->unk_090.y; } } } } } } } for (i = 0, obj408 = gObjects408; i < ARRAY_COUNT(gObjects408); i++, obj408++) { if (obj408->obj.status == 2) { if ((obj408->obj.id == OBJ_408_312) || (obj408->obj.id == OBJ_408_308) || (obj408->obj.id == OBJ_408_313) || (obj408->obj.id == OBJ_408_309)) { temp_v0 = func_800A8304(player, obj408->obj.id, obj408->obj.pos.x, obj408->obj.pos.y, obj408->obj.pos.z, obj408->obj.rot.x, obj408->obj.rot.y, obj408->obj.rot.z); if (temp_v0 != 0) { Player_ApplyDamage(player, temp_v0, obj408->info.damage); break; } } if (obj408->obj.id == OBJ_408_310) { spfD4.x = fabsf(obj408->obj.pos.x - player->pos.x) * .8333333f; spfD4.y = fabsf(obj408->obj.pos.y - player->pos.y) * 2; spfD4.z = fabsf(obj408->obj.pos.z - player->unk_138) * 0.8333333f; if (sqrtf(VEC3F_SQ(spfD4)) < 1500.0f) { Player_ApplyDamage(player, 0, obj408->info.damage); player->unk_110 = 0.0f; player->timer_498 = 5; player->unk_0D8.y = 30.0f; obj408->unk_062 = 1; func_8007BFFC(player->pos.x + (10.0f * (Rand_ZeroOne() - 0.5f)), player->pos.y + (10.0f * Rand_ZeroOne()), player->unk_138 + (10.0f * (Rand_ZeroOne() - 0.5f)), 0.0f, 15.0f, 0.0f, 2.0f, 5); for (j = 0; j < 10; j++) { func_8007C484(player->pos.x + (30.0f * (Rand_ZeroOne() - 0.5f)), player->pos.y + (10.0f * Rand_ZeroOne()), player->unk_138 + (30.0f * (Rand_ZeroOne() - 0.5f)), player->vel.x, 20.0f + player->vel.y, player->vel.z, (Rand_ZeroOne() * 0.1f) + 0.1f, player->num + 11); } break; } } else { if (obj408->obj.id == OBJ_408_316) { spfD4.x = fabsf(obj408->obj.pos.x - player->pos.x); spfD4.y = fabsf(obj408->obj.pos.y - 300.0f - player->pos.y) * 7.42f; spfD4.z = fabsf(obj408->obj.pos.z - player->unk_138); if (sqrtf(VEC3F_SQ(spfD4)) < 2700.0f) { Player_ApplyDamage(player, 3, obj408->info.damage); } } temp_v0 = func_800A7974(player, obj408->info.hitbox, &sp98, obj408->obj.pos.x, obj408->obj.pos.y, obj408->obj.pos.z, obj408->obj.rot.x, obj408->obj.rot.y, obj408->obj.rot.z, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { if (temp_v0 < 0) { if (player->unk_22C == 0) { Audio_PlaySfx(0x19000001, &obj408->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else { if ((obj408->obj.id == OBJ_408_320) && (obj408->timer_056 != 0) && (sp98 == 5)) { break; } Player_ApplyDamage(player, temp_v0, obj408->info.damage); if ((obj408->obj.id == OBJ_408_303) && ((obj408->unk_04E == 2) || (obj408->unk_04E == 3)) && (sp98 >= 9)) { player->unk_0D8.y = -100.0f; } if ((obj408->obj.id == OBJ_408_320) && (sp98 < 5)) { player->unk_0D8.x = obj408->unk_110; player->unk_0D8.y = obj408->unk_114; } } } } } } for (i = 0, obj2F4 = gObjects2F4; i < ARRAY_COUNT(gObjects2F4); i++, obj2F4++) { if ((obj2F4->obj.status == 2) && (obj2F4->timer_0C2 == 0)) { if (obj2F4->obj.id == OBJ_2F4_180) { temp_v0 = func_800A8304(player, obj2F4->obj.id, obj2F4->obj.pos.x, obj2F4->obj.pos.y, obj2F4->obj.pos.z, obj2F4->obj.rot.x, obj2F4->obj.rot.y, obj2F4->obj.rot.z); if (temp_v0 != 0) { Player_ApplyDamage(player, temp_v0, obj2F4->info.damage); } } else if (obj2F4->obj.id == OBJ_2F4_200) { if (obj2F4->unk_0B4 == 42) { temp_v0 = func_800A8304(player, OBJ_UNK_1000, obj2F4->obj.pos.x, obj2F4->obj.pos.y, obj2F4->obj.pos.z, obj2F4->obj.rot.x, obj2F4->obj.rot.y, obj2F4->obj.rot.z); if (temp_v0 != 0) { Player_ApplyDamage(player, temp_v0, obj2F4->info.damage); } } else if (obj2F4->unk_0B4 == 63) { spfD4.x = fabsf(obj2F4->obj.pos.x - player->pos.x); spfD4.y = fabsf(obj2F4->obj.pos.y - player->pos.y); spfD4.z = fabsf(obj2F4->obj.pos.z - player->unk_138); if (sqrtf(VEC3F_SQ(spfD4)) < 900.0f) { Player_ApplyDamage(player, 0, obj2F4->info.damage); obj2F4->unk_0D0 = 3; } } else { temp_v0 = func_800A7974(player, obj2F4->info.hitbox, &sp98, obj2F4->obj.pos.x, obj2F4->obj.pos.y, obj2F4->obj.pos.z, obj2F4->obj.rot.x, obj2F4->obj.rot.y, obj2F4->obj.rot.z, obj2F4->unk_2E8.x, obj2F4->unk_2E8.y, obj2F4->unk_2E8.z + obj2F4->unk_0F4.z); if (temp_v0 != 0) { if ((temp_v0 < 0) && (obj2F4->unk_0B4 == 38)) { obj2F4->info.hitbox = SEGMENTED_TO_VIRTUAL(D_6032328); if (D_80177E80 >= 0) { obj2F4->unk_046 = 2; D_80177E80++; if (D_80177E80 == 3) { func_800BA808(gMsg_ID_5504, RCID_FALCO); } Audio_PlaySfx(D_800CFF54[D_80177E80], &gPlayer->unk_460, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); Audio_PlaySfx(0x49008025, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } else if (temp_v0 < 0) { if (player->unk_22C == 0) { Audio_PlaySfx(0x19000001, &obj2F4->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else { Player_ApplyDamage(player, temp_v0, obj2F4->info.damage); obj2F4->unk_0D0 = 3; obj2F4->unk_0D4 = player->num + 1; } } } } else if ((obj2F4->obj.id >= OBJ_2F4_205) && (obj2F4->obj.id < OBJ_2F4_214)) { temp_v0 = func_800A7974(player, obj2F4->info.hitbox, &sp98, obj2F4->unk_178 + obj2F4->obj.pos.x, obj2F4->unk_134 + obj2F4->obj.pos.y + 25.0f, obj2F4->obj.pos.z, obj2F4->unk_188, obj2F4->unk_17C, obj2F4->obj.rot.z, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { obj2F4->unk_0D0 = 3; if (obj2F4->info.damage) { Player_ApplyDamage(player, temp_v0, obj2F4->info.damage); } else { obj2F4->unk_0D0 = -1; } } } else { temp_v0 = func_800A7974(player, obj2F4->info.hitbox, &sp98, obj2F4->obj.pos.x, obj2F4->obj.pos.y, obj2F4->obj.pos.z, obj2F4->obj.rot.x, obj2F4->obj.rot.y, obj2F4->obj.rot.z, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { if (temp_v0 < 0) { if (player->unk_22C == 0) { Audio_PlaySfx(0x19000001, &obj2F4->sfxPos, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } player->unk_22C += 2; if (player->unk_22C >= 4) { player->unk_22C = 4; } } else { obj2F4->unk_0D0 = 3; if (obj2F4->obj.id == OBJ_2F4_190) { obj2F4->unk_0D0 = -1; } if (obj2F4->info.damage) { Player_ApplyDamage(player, temp_v0, obj2F4->info.damage); if (obj2F4->obj.id == OBJ_2F4_225) { player->unk_0D8.y = 0.0f; } } else { obj2F4->unk_0D0 = -1; } } } } } } for (i = 0, obj4C = gObjects4C; i < ARRAY_COUNT(gObjects4C); i++, obj4C++) { if (obj4C->obj.status == 2) { if ((player->unk_138 - 200.0f) < obj4C->obj.pos.z) { temp_v0 = func_800A7974(player, obj4C->info.hitbox, &sp98, obj4C->obj.pos.x, obj4C->obj.pos.y, obj4C->obj.pos.z, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); if (temp_v0 != 0) { if ((obj4C->obj.id == OBJ_4C_163) || (obj4C->obj.id == OBJ_4C_161) || (obj4C->obj.id == OBJ_4C_169) || (obj4C->obj.id == OBJ_4C_162)) { obj4C->unk_46 = 1; player->unk_1F4 = 6; player->unk_21C = 0; } else { Player_ApplyDamage(player, temp_v0, obj4C->info.damage); } } } } } } func_800A86E4(player); if (gCamCount == 4) { for (opponent = &gPlayer[3], i = 3; i >= 0; i--, opponent--) { if ((i != gPlayerNum) && (opponent->state_1C8 == PLAYERSTATE_1C8_3)) { spC8.x = 25.0f; if (player->form == FORM_ON_FOOT) { spC8.x = 4.0f; } spC8.y = 25.0f; if (opponent->form == FORM_ON_FOOT) { spC8.y = 4.0f; } spBC.x = spBC.z = spC8.x + spC8.y; spC8.x = 23.0f; if (player->form == FORM_ON_FOOT) { spC8.x = 7.0f; } spC8.y = 23.0f; if (opponent->form == FORM_ON_FOOT) { spC8.y = 7.0f; } spBC.y = spC8.x + spC8.y; if ((fabsf(opponent->unk_138 - player->unk_138) <= spBC.z) && (fabsf(opponent->pos.y - player->pos.y) <= spBC.y) && (fabsf(opponent->pos.x - player->pos.x) <= spBC.x)) { if ((player->form == FORM_ON_FOOT) && (opponent->form == FORM_ON_FOOT)) { player->pos.x = player->unk_090.x; player->pos.y = player->unk_090.y; player->pos.z = player->unk_138 = player->unk_090.z; opponent->pos.x = opponent->unk_090.x; opponent->pos.y = opponent->unk_090.y; opponent->pos.z = opponent->unk_138 = opponent->unk_090.z; player->unk_0D8.x = (player->pos.x - opponent->unk_090.x) * 0.5f; player->unk_0D8.z = (player->unk_138 - opponent->unk_138) * 0.5f; opponent->unk_0D8.x = -player->unk_0D8.x; opponent->unk_0D8.z = -player->unk_0D8.z; opponent->unk_0D0 = player->unk_0D0 = 2.0f; } else { func_800A8804(player, opponent); func_800A8804(opponent, player); } } } } } if (D_80178294 != 0) { if (func_800A73E4(&sp94, &sp90, player->hit3.x, player->hit3.y, player->hit3.z)) { if (gCurrentLevel == LEVEL_ZONESS) { player->unk_0E4 = (player->unk_0D0 + player->unk_110) * 0.8f; player->unk_1F4 = 15; func_8007B228(player->hit3.x, sp94, player->hit3.z, 1.0f); } else { if (player->unk_1F4 == 0) { Player_ApplyDamage(player, 4, 10); } player->unk_0D8.y = 30.0f; player->unk_0E4 = (player->unk_0D0 + player->unk_110) * 0.8f; } if (player->state_1C8 == PLAYERSTATE_1C8_4) { player->timer_220 = 2; func_8007AFD0(player->pos.x, player->unk_138, 30.0f, 0.0f, 5.0f); func_8007AFD0(player->pos.x, player->unk_138, -30.0f, 0.0f, 5.0f); } } if (func_800A73E4(&sp94, &sp90, player->pos.x + ((player->hit1.x - player->pos.x) * 1.5f), player->pos.y + (player->hit1.y - player->pos.y) * 1.5f, player->hit1.z)) { if (gCurrentLevel == LEVEL_ZONESS) { func_8007B228(player->pos.x + (player->hit1.x - player->pos.x) * 1.5f, sp94, player->hit1.z, 1.0f); } else { if (player->unk_1F4 == 0) { Player_ApplyDamage(player, 1, 10); } player->unk_0D8.y = 30.0f; } } if (func_800A73E4(&sp94, &sp90, player->pos.x + ((player->hit2.x - player->pos.x) * 1.5f), player->pos.y + (player->hit2.y - player->pos.y) * 1.5f, player->hit2.z)) { if (gCurrentLevel == LEVEL_ZONESS) { func_8007B228(player->pos.x + (player->hit2.x - player->pos.x) * 1.5f, sp94, player->hit2.z, 1.0f); } else { if (player->unk_1F4 == 0) { Player_ApplyDamage(player, 2, 40); } player->unk_0D8.y = 30.0f; } } } } void func_800AA800(Player* player) { s32 sp144; Object_58* obj58; Object_80* obj80; s32 count; s32 var_s0; s32 i; f32 tempx; f32 tempy; f32 tempz; f32 sp120; f32* hitboxData; Hitbox* hitbox; f32 var_fs0; f32 var_fs1; f32 tempx2; f32 tempy2; f32 tempz2; f32 sp100; f32 spFC; f32 spF8; Vec3f spEC; Vec3f spE0; Vec3f spD4; Vec3f spC8; Vec3f spBC; Vec3f spB0; f32 spA8[2]; Vec3f sp9C = D_800D30E8; Vec3f* rot; s32 pad3; s32 pad4; if (player->unk_240 == 0) { player->unk_064 = player->pos.x; player->unk_06C = player->unk_138 - player->pos.y; if (D_801784AC != 4) { if (gCamCount == 1) { player->unk_068 = D_80177940 + 3.0f; } else { player->unk_068 = D_80177940; if (player->form == FORM_ON_FOOT) { player->unk_06C = player->unk_138; } } player->unk_248 = player->unk_24C = player->unk_070 = 0.0f; } sp100 = 0.0f; spFC = 0.0f; spF8 = 0.0f; if (gCamCount != 1) { if (player->form == FORM_ON_FOOT) { for (sp144 = 0; sp144 < 200; sp144++) { obj58 = &gObjects58[sp144]; if ((obj58->obj.status == 2) && ((obj58->obj.id == OBJ_80_143) || (obj58->obj.id == OBJ_80_140) || (obj58->obj.id == OBJ_80_141)) && (fabsf(obj58->obj.pos.x - player->pos.x) < 2000.0f) && (fabsf(obj58->obj.pos.z - player->unk_138) < 2000.0f)) { spC8.x = obj58->obj.pos.x; spC8.y = obj58->obj.pos.y; spC8.z = obj58->obj.pos.z; spD4.x = player->pos.x; spD4.y = D_80177940; spD4.z = player->unk_138; var_s0 = 4; if (obj58->obj.id == OBJ_80_141) { var_s0 = 6; } else if (obj58->obj.id == OBJ_80_143) { var_s0 = 17; } if (func_800A3690(&spD4, &spC8, var_s0, &spBC) != 0) { player->unk_068 = spBC.y + 1.0f; player->unk_248 = spBC.x; player->unk_24C = spBC.z; break; } } } } } else { if ((gLevelMode == LEVELMODE_ALL_RANGE) && (gLevelType == LEVELTYPE_PLANET)) { player->unk_064 = player->pos.x; player->unk_06C = player->unk_138; for (sp144 = 0, obj58 = gObjects58; sp144 < 200; sp144++, obj58++) { if ((obj58->obj.status == 2) && ((obj58->obj.id == OBJ_80_150) || (obj58->obj.id == OBJ_80_149) || (obj58->obj.id == OBJ_80_148) || (obj58->obj.id == OBJ_80_1) || (obj58->obj.id == OBJ_80_3)) && (fabsf(obj58->obj.pos.x - player->pos.x) < 2500.0f) && (fabsf(obj58->obj.pos.z - player->unk_138) < 2500.0f)) { tempx = obj58->obj.pos.x; tempy = obj58->obj.pos.y; tempz = obj58->obj.pos.z; sp120 = obj58->obj.rot.y; Matrix_RotateY(gCalcMatrix, -sp120 * M_DTOR, 0); spEC.x = player->pos.x - tempx; spEC.y = 0.0f; spEC.z = player->unk_138 - tempz; Matrix_MultVec3fNoTranslate(gCalcMatrix, &spEC, &spE0); spD4.x = spE0.x + tempx; spD4.y = spE0.y + tempy; spD4.z = spE0.z + tempz; spC8.x = tempx; spC8.y = tempy; spC8.z = tempz; if ((obj58->obj.id == OBJ_80_149) || (obj58->obj.id == OBJ_80_150)) { if (obj58->obj.id == OBJ_80_149) { var_s0 = 5; } else { var_s0 = 6; } if (func_800998FC(&spD4, &spC8, &sp9C, var_s0, &spB0, spA8) > 0) { player->unk_068 = spB0.y; player->unk_248 = spA8[0]; player->unk_24C = spA8[1]; player->unk_070 = (sp120 / 180.0f) * M_PI; } } else { var_s0 = 0; if (obj58->obj.id == OBJ_80_3) { var_s0 = 3; } if (func_800A3690(&spD4, &spC8, var_s0, &spBC) != 0) { player->unk_068 = spBC.y; player->unk_248 = spBC.x; player->unk_24C = spBC.z; player->unk_070 = (sp120 / 180.0f) * M_PI; } } } } } for (sp144 = 0, obj80 = gObjects80; (sp144 < 50) && (gLevelMode == LEVELMODE_ON_RAILS) && (gCurrentLevel != LEVEL_VENOM_1); sp144++, obj80++) { if ((obj80->obj.status == 2) && ((player->unk_138 - 3000.0f) < obj80->obj.pos.z) && (obj80->obj.id != OBJ_80_0) && (obj80->obj.id != OBJ_80_8)) { tempx = obj80->obj.pos.x; tempy = obj80->obj.pos.y; tempz = obj80->obj.pos.z; sp120 = obj80->obj.rot.y; if ((obj80->obj.id == OBJ_80_3) || (obj80->obj.id == OBJ_80_2) || (obj80->obj.id == OBJ_80_47) || (obj80->obj.id == OBJ_80_4) || (obj80->obj.id == OBJ_80_5)) { Matrix_RotateY(gCalcMatrix, -sp120 * M_DTOR, 0); for (var_fs1 = var_fs0 = -50.0f; var_fs0 > -500.0f; var_fs0 -= 5.0f, var_fs1 -= 5.0f) { spEC.x = player->pos.x - tempx; spEC.y = player->pos.y + var_fs0 - tempy; spEC.z = player->unk_138 + var_fs1 - tempz; Matrix_MultVec3fNoTranslate(gCalcMatrix, &spEC, &spE0); if ((player->pos.y + var_fs0) <= D_80177940) { break; } spD4.x = spE0.x + tempx; spD4.y = spE0.y + tempy; spD4.z = spE0.z + tempz; spC8.x = tempx; spC8.y = tempy; spC8.z = tempz; var_s0 = 0; if (obj80->obj.id == OBJ_80_47) { var_s0 = 7; } if (obj80->obj.id == OBJ_80_2) { var_s0 = 2; } else if (obj80->obj.id == OBJ_80_3) { var_s0 = 3; } else if ((obj80->obj.id == OBJ_80_4) || (obj80->obj.id == OBJ_80_5)) { var_s0 = 1; } if (func_800A3690(&spD4, &spC8, var_s0, &spBC) != 0) { player->unk_068 = spBC.y; player->unk_06C = player->unk_138 + var_fs1; player->unk_248 = spBC.x; player->unk_24C = spBC.z; player->unk_070 = (sp120 / 180.0f) * M_PI; break; } } } else { hitboxData = obj80->info.hitbox; count = (s32) *hitboxData; if (count != 0) { if (obj80->info.action == (ObjectFunc) func_80066EA8) { sp120 = 0.0f; } hitboxData++; for (i = 0; i < count; i++, hitboxData += 6) { if (*hitboxData >= HITBOX_UNK_3) { break; } if (*hitboxData == HITBOX_UNK_2) { sp100 = hitboxData[1]; spFC = hitboxData[2]; spF8 = hitboxData[3]; hitboxData += 4; Matrix_RotateZ(gCalcMatrix, -spF8 * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -sp100 * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -spFC * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -sp120 * M_DTOR, 1); } else { Matrix_RotateY(gCalcMatrix, -sp120 * M_DTOR, 0); } hitbox = (Hitbox*) hitboxData; for (var_fs0 = var_fs1 = -50.0f; var_fs0 > -500.0f; var_fs0 -= 5.0f, var_fs1 -= 5.0f) { spEC.x = player->pos.x - tempx; spEC.y = player->pos.y + var_fs0 - tempy; spEC.z = player->unk_138 + var_fs1 - tempz; Matrix_MultVec3fNoTranslate(gCalcMatrix, &spEC, &spE0); tempx2 = spE0.x + tempx; tempy2 = spE0.y + tempy; tempz2 = spE0.z + tempz; if (spEC.y + tempy <= D_80177940) { break; } if (func_800A78C4(hitbox, tempx, tempy, tempz, tempx2, tempy2, tempz2) != 0) { if (D_80177940 < player->unk_068) { player->unk_068 = spEC.y + 15.0f + tempy; player->unk_06C = spEC.z + 10.0f + tempz; player->unk_248 = (sp100 / 180.0f) * M_PI; player->unk_070 = (sp120 / 180.0f) * M_PI; } break; } } } } } } } } } } void func_800AB2AC(void) { u8* ptr = (u8*) gPlayer; u32 i; for (i = 0; i < gCamCount * sizeof(Player); i++, ptr++) { *ptr = 0; } } void func_800AB304(Player* player) { u8* ptr = (u8*) player; u32 i; for (i = 0; i < sizeof(Player); i++, ptr++) { *ptr = 0; } } void func_800AB334(void) { Vtx* mesh; u8* ptr; s32 i; f32* fptr; switch (gCurrentLevel) { case LEVEL_TRAINING: func_8001DC6C(0, 28); D_8017796C = -1; break; case LEVEL_VENOM_1: func_8001DC6C(0, 6); break; case LEVEL_VENOM_2: func_8001DC6C(0, 6); break; case LEVEL_VENOM_ANDROSS: func_8001DC6C(0, 15); func_8001D400(0); D_8017796C = -1; break; } D_80178294 = 0; switch (gCurrentLevel) { case LEVEL_SECTOR_Z: D_80177B8C = 1; break; case LEVEL_METEO: case LEVEL_SECTOR_X: if (D_8017827C == 1) { gFogRed = 178; gFogGreen = 190; gFogBlue = 90; gLight1R = 200; gLight1G = 200; gLight1B = 120; gAmbientR = 0; gAmbientG = 50; gAmbientB = 100; } break; case LEVEL_VENOM_ANDROSS: D_80177A98 = 0; D_80177AB0 = 6; D_E9F1D0_801A7F78 = 0.0f; D_E9F1D0_801A7F70 = D_E9F1D0_801A7F78; D_E9F1D0_801A7F68 = D_E9F1D0_801A7F70; D_E9F1D0_801A7F60 = D_E9F1D0_801A7F68; D_E9F1D0_801A7F58 = D_E9F1D0_801A7F60; break; case LEVEL_AQUAS: D_80137E78 = 3; D_8015F970 = 1600.0f; D_E16C50_801C4188 = 128.0f; func_E16C50_801A9824(); break; case LEVEL_TITANIA: func_E6A810_80188F30(); gTeamShields[2] = -2; break; case LEVEL_MACBETH: func_E6A810_80199920(); break; case LEVEL_ZONESS: MEM_ARRAY_ALLOCATE(D_801782C4, 200); ptr = (u8*) D_801782C4; for (i = 0; i < 200 * sizeof(PosRot); i++, ptr++) { *ptr = 0; } D_801784A4 = 0; /* fallthrough */ case LEVEL_SOLAR: D_80178294 = 1; D_80177940 = -20000.0f; fptr = MEM_ARRAY_ALLOCATE(D_801782CC, 17 * 17); for (i = 0; i < 17 * 17; i++, fptr++) { *fptr = 0.0f; } fptr = MEM_ARRAY_ALLOCATE(D_801782D4, 17 * 17); for (i = 0; i < 17 * 17; i++, fptr++) { *fptr = 0.0f; } fptr = MEM_ARRAY_ALLOCATE(D_801782DC, 17 * 17); for (i = 0; i < 17 * 17; i++, fptr++) { *fptr = 0.0f; } fptr = MEM_ARRAY_ALLOCATE(D_801782E4, 17 * 17); for (i = 0; i < 17 * 17; i++, fptr++) { *fptr = 0.0f; } fptr = MEM_ARRAY_ALLOCATE(D_801782EC, 17 * 17); for (i = 0; i < 17 * 17; i++, fptr++) { *fptr = 0.0f; } switch (gCurrentLevel) { case LEVEL_SOLAR: mesh = SEGMENTED_TO_VIRTUAL(D_6001C50); break; case LEVEL_ZONESS: mesh = SEGMENTED_TO_VIRTUAL(D_6009ED0); break; } for (i = 0; i < 17 * 17; i++, mesh++) { if (mesh->v.ob[0] == 800) { mesh->v.ob[0] = 1400; } if (mesh->v.ob[0] == -800) { mesh->v.ob[0] = -1400; } if (mesh->v.ob[2] == -800) { mesh->v.ob[2] = -1400; } } switch (gCurrentLevel) { case LEVEL_SOLAR: mesh = SEGMENTED_TO_VIRTUAL(D_6004500); break; case LEVEL_ZONESS: mesh = SEGMENTED_TO_VIRTUAL(D_600C780); break; } for (i = 0; i < 17 * 17; i++, mesh++) { if (mesh->v.ob[0] == 800) { mesh->v.ob[0] = 1400; } if (mesh->v.ob[0] == -800) { mesh->v.ob[0] = -1400; } if (mesh->v.ob[2] == -800) { mesh->v.ob[2] = -1400; } } break; } } void func_800AB964(void) { s32 i; s32 j; D_80178754 = 0; for (i = 0; i < 4; i++) { D_80177DB8[i] = 0; for (j = 0; j < 10; j++) { D_80177DD0[i][j] = 0; } gLaserStrength[i] = 0; gBombCount[i] = 0; } D_80177E7C = D_80177E74 = 0; } void func_800ABA08(void) { s32 i; func_800AB964(); for (i = 0; i < 4; i++) { gPlayerNum = i; func_800AB304(&gPlayer[i]); func_800B0F50(&gPlayer[i]); func_800B44C4(&gPlayer[i]); func_800B7184(&gPlayer[i], 1); } func_800A6148(); } void func_800ABAB4(void) { s32 i; D_80161A54 = 40.0f; for (i = 0; i < 4; i++) { gControllerRumble[i] = 0; } if (gExpertMode != 0) { D_80177828 = 200; } else { D_80177828 = 100; } D_801779BC = 0; D_80137E78 = 2; D_80177C70 = 0; D_800CA234 = NULL; D_Timer_800CA238 = 0; func_8001A838(0x11403076); func_8001A838(0x49000014); Memory_FreeAll(); D_80177C78 = D_80177C8C = D_80161734 = D_8015F908 = D_8015F90C = D_8015F910 = 0; D_800CA220 = 0; D_80177830 = 0; if (gCurrentLevel != LEVEL_VERSUS) { gOverlayStage = 0; } D_80161A2C = 1; D_80177A98 = D_80177AB0 = 1; D_80177AC8 = D_800D2F54 = 0; D_800CA230 = D_800D2F58 = 0.0f; gLevelMode = LEVELMODE_ON_RAILS; D_80177CE8 = D_8015F968 = 0.0f; D_800D1970 = gVersusMode = D_80178300 = D_80177E84 = 0; if (gCurrentLevel >= LEVEL_FORTUNA) { gLevelMode = LEVELMODE_ALL_RANGE; if (gCurrentLevel == LEVEL_VERSUS) { gVersusMode = true; func_800AB964(); } } if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) && (D_8017827C == 1)) { gLevelMode = LEVELMODE_ALL_RANGE; } D_80177E7C = 0; func_800A594C(); D_80161A62 = D_8017796C = D_Timer_80177B44 = D_80177B4C = D_8015F928 = D_8015F940 = D_80178284 = gFrameCount = D_80178480 = D_801782FC = D_801613A0 = D_80161690 = D_8015F900 = D_80177930 = 0; if (gCurrentLevel == LEVEL_SECTOR_X) { D_80177930 = 1; } D_80177CC0 = -25000.0f; D_80177950 = 1.0f; if ((gCurrentLevel == LEVEL_VENOM_2) && (D_8017827C == 2)) { D_80178348 = D_80178350 = D_80178354 = 255; } else { D_80178348 = D_80178350 = D_80178354 = 0; } D_Timer_80161A60 = D_80178360 = D_80178364 = D_80178368 = D_80161704 = D_80161708 = D_80178340 = D_80177C50 = D_8015F93C = D_80177B6C = 0; D_80177A80 = 0; D_80178340 = D_80178358 = 255; D_8017835C = 16; D_8017836C = 0.0f; D_8015F960 = 0.0f; D_80177940 = 0.0f; D_80178414 = D_80178420 = D_80178424 = D_80178428 = D_8017842C = D_80178430 = 0.0f; if ((gLevelType == LEVELTYPE_SPACE) || (gCurrentLevel == LEVEL_TRAINING)) { func_800A5EBC(); if (gCurrentLevel != LEVEL_TRAINING) { D_80177A98 = 0; } } else { D_80178410 = 0; } gFogAlpha = 255; D_801784E8 = 5.0f; D_80178510 = 5.0f; D_80178538 = 5.0f; func_800A6148(); D_801782C8 = 0; if (gCurrentLevel == LEVEL_TITANIA) { func_E6A810_801B5110(0.0f, 0.0f, 200.0f); } if (gCurrentLevel == LEVEL_AQUAS) { D_80177CC0 = 1000.0f; } D_80178488 = false; gCamCount = 1; if (gCurrentLevel == LEVEL_VERSUS) { gCamCount = 4; } for (i = 1; i < 6; i++) { gTeamShields[i] = gSavedTeamShields[i]; } MEM_ARRAY_ALLOCATE(gPlayer, gCamCount); func_800AB2AC(); for (i = 0; i < gCamCount; i++) { gPlayer[i].state_1C8 = PLAYERSTATE_1C8_1; D_80178380[i] = D_801783C0[i] = 0; D_Timer_80177BD0[i] = 0; D_80177C30[i] = 0; } if (gLevelMode == LEVELMODE_ALL_RANGE) { MEM_ARRAY_ALLOCATE(gObjects58, 200); for (i = 0; i < 200; i++) { gObjects58[i].obj.status = 0; } switch (gCurrentLevel) { case LEVEL_SECTOR_Z: if (D_8017782C == 0) { func_E51970_8019EA68(&gObjects58); func_8002F180(); } break; case LEVEL_FORTUNA: func_E51970_8018BA2C(&gObjects58); func_8002F180(); break; case LEVEL_KATINA: func_E51970_80198930(&gObjects58); if (D_8017782C == 0) { func_8002F180(); } break; case LEVEL_BOLSE: if (D_8017782C == 0) { func_E51970_80191ED8(&gObjects58); func_8002F180(); } break; case LEVEL_VENOM_2: func_E9F1D0_80196968(&gObjects58); if (D_8017827C == 0) { func_8002F180(); } break; case LEVEL_VENOM_ANDROSS: if (D_8017827C == 1) { if (D_8015F924 == 0) { func_E9F1D0_801878A8(&gObjects58); } else { func_E9F1D0_801961AC(&gObjects58); } } break; case LEVEL_VERSUS: func_800A4F7C(); D_8017796C = -1; break; } } func_800AB334(); } void func_800AC290(Player* player, PlayerShot* shot, f32 arg2, f32 arg3, s32 objId, f32 arg5) { Vec3f sp44; Vec3f sp38; Vec3f sp2C; PlayerShot_Initialize(shot); 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); Matrix_RotateZ(gCalcMatrix, -((player->unk_0F8 + player->unk_0F0) * M_DTOR), 1); Matrix_Translate(gCalcMatrix, player->unk_084, player->unk_080, 0.0f, 1); if ((gVersusMode) && (objId <= PLAYERSHOT_1)) { arg5 *= 0.5f; } sp44.x = 0.0f; sp44.y = 0.0f; sp44.z = arg5; Matrix_MultVec3f(gCalcMatrix, &sp44, &sp38); sp44.x = arg2; sp44.y = -5.0f + arg3; sp44.z = 0.0f; Matrix_MultVec3f(gCalcMatrix, &sp44, &sp2C); shot->obj.status = 1; shot->unk_20.x = sp38.x; shot->unk_20.y = sp38.y; shot->unk_20.z = sp38.z; shot->unk_60 = 0; shot->obj.id = objId; if (!gVersusMode) { shot->unk_64 = 35; } else { shot->unk_64 = 37; } if (shot->obj.id == PLAYERSHOT_4) { shot->obj.pos.x = player->pos.x + sp2C.x; shot->obj.pos.y = player->pos.y + sp2C.y; shot->obj.pos.z = player->unk_138 + sp2C.z; shot->unk_64 = 38; } else { shot->obj.pos.x = player->pos.x + sp2C.x + (sp38.x * 1.2); shot->obj.pos.y = player->pos.y + sp2C.y + (sp38.y * 1.2); shot->obj.pos.z = player->unk_138 + sp2C.z + (sp38.z * 1.2f); } shot->obj.rot.x = player->unk_120 + player->unk_0E4 + player->unk_4D8; shot->obj.rot.y = player->unk_0E8 + player->unk_114; shot->obj.rot.z = player->unk_0F8; if (objId == PLAYERSHOT_8) { if (gCurrentLevel == LEVEL_AQUAS) { shot->unk_58 = Rand_ZeroOne() * 360.0f; shot->unk_60 = Rand_ZeroOne() * 360.0f; shot->unk_2C = player->unk_0E4 + player->unk_4D8; shot->unk_30 = player->unk_0E8; shot->unk_34 = player->unk_0F8; shot->unk_5C = D_80178494; } else { shot->unk_30 = player->unk_0E8 + player->unk_114; shot->unk_2C = player->unk_0E4 + player->unk_4D8; if (arg5 <= 65.0f) { shot->unk_5C = 1; } shot->unk_64 = 30; } } shot->playerNum = player->num; } void func_800AC650(Player* player, PlayerShot* shot, s32 objId, f32 arg3) { Vec3f sp54; Vec3f sp48; Vec3f sp3C; PlayerShot_Initialize(shot); Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, (player->unk_0EC + player->unk_0F0) * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, (-player->unk_12C - player->unk_130) * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, -player->unk_180 * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, player->unk_17C * M_DTOR, 1); sp54.x = 0; sp54.y = 0; sp54.z = arg3; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48); Matrix_Translate(gCalcMatrix, 0.0f, player->unk_18C + 30.0f, 0, 0); Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, (player->unk_0EC + player->unk_0F0) * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 1); Matrix_RotateZ(gCalcMatrix, (-player->unk_12C - player->unk_130) * M_DTOR, 1); Matrix_Translate(gCalcMatrix, 0.0f, -30.0f, 0, 1); Matrix_Translate(gCalcMatrix, player->unk_084, player->unk_080, 0.0f, 1); Matrix_Translate(gCalcMatrix, 0.0f, 51.0f, -4.0f, 1); Matrix_RotateY(gCalcMatrix, -player->unk_180 * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, player->unk_17C * M_DTOR, 1); sp54.x = 0; sp54.y = 7; sp54.z = 0; Matrix_MultVec3f(gCalcMatrix, &sp54, &sp3C); shot->unk_20.x = sp48.x; shot->unk_20.y = sp48.y; shot->unk_20.z = sp48.z; shot->obj.pos.x = player->pos.x + sp3C.x; shot->obj.pos.y = player->pos.y + sp3C.y; shot->obj.pos.z = player->unk_138 + sp3C.z; shot->obj.status = 1; shot->unk_2C = -player->unk_17C; shot->unk_30 = -player->unk_180; shot->unk_34 = player->unk_12C; shot->obj.rot.x = player->unk_0E4 + player->unk_120; shot->obj.rot.y = player->unk_0E8 + player->unk_114; shot->obj.rot.z = player->unk_0EC; shot->unk_64 = 40; shot->obj.id = objId; shot->playerNum = player->num; if (objId == PLAYERSHOT_8) { if (arg3 <= 65.0f) { shot->unk_5C = 1; } shot->unk_64 = 30; shot->unk_30 = player->unk_0E8 + player->unk_114; } } void func_800ACA40(Player* player) { s32 i; for (i = 0; i < ARRAY_COUNT(gPlayerShots) - 1; i++) { if (gPlayerShots[i].obj.status == 0) { func_800AC650(player, &gPlayerShots[i], PLAYERSHOT_5, 100.0f); func_800A5FA0(&player->unk_460, 0x09000014, player->num); player->unk_1A0 = 2; break; } } } void func_800ACABC(Player* player) { s32 i; s32 laser = gLaserStrength[gPlayerNum]; if (player->wings.unk_14 > -8.0f) { laser = 0; } switch (laser) { case 0: for (i = 0; i < ARRAY_COUNT(gPlayerShots) - 1; i++) { if (gPlayerShots[i].obj.status == 0) { func_800AC290(player, &gPlayerShots[i], 0.0f, 0.0f, PLAYERSHOT_0, 400.0f / 3.0f); func_800A5FA0(&player->unk_460, 0x09400000, player->num); D_80177AA0[player->num] = 0.5f; break; } } break; case 1: case 2: for (i = 0; i < ARRAY_COUNT(gPlayerShots) - 1; i++) { if (gPlayerShots[i].obj.status == 0) { func_800AC290(player, &gPlayerShots[i], 0.0f, -10.0f, PLAYERSHOT_1, 400.0f / 3.0f); if (laser == 1) { func_800A5FA0(&player->unk_460, 0x0940800C, player->num); D_80177AA0[player->num] = 0.5f; } else { func_800A5FA0(&player->unk_460, 0x0940802B, player->num); D_80177AA0[player->num] = 0.75f; } break; } } break; } } void func_800ACC7C(Player* player) { if ((gBombCount[player->num] != 0) && (gBombButton[player->num] & gInputPress->button) && (gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].obj.status == 0)) { if (gVersusMode) { gBombCount[player->num] = 0; } else { gBombCount[player->num]--; } if (player->form == FORM_ARWING) { func_800AC290(player, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1], 0.0f, 0.0f, PLAYERSHOT_3, 180.0f); } else if (player->form == FORM_LANDMASTER) { func_800AC650(player, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1], PLAYERSHOT_3, 180.0f); } else { func_800ACDC0(player, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1], PLAYERSHOT_3); } gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].unk_48 = 30.0f; gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].unk_60 = 0; func_8001CB80(player->num, 1); func_8001CCDC(player->num, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].sfxPos); } } void func_800ACDC0(Player* player, PlayerShot* shot, s32 objId) { Vec3f sp5C; Vec3f sp50; Vec3f sp44; PlayerShot_Initialize(shot); Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + player->unk_134 + 180.0f) * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_134) * M_DTOR), 1); Matrix_RotateZ(gCalcMatrix, -((player->unk_0F8 + player->unk_0F0 + player->unk_134) * M_DTOR), 1); Matrix_RotateX(gCalcMatrix, player->unk_154 * M_DTOR, 1); sp5C.x = 0.0f; sp5C.y = 0.0f; if (objId == PLAYERSHOT_3) { sp5C.z = 100.0f; } else { sp5C.z = 150.0f; } Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp5C, &sp50); Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + player->unk_134 + 180.0f) * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_134) * M_DTOR), 1); Matrix_RotateZ(gCalcMatrix, -((player->unk_0F8 + player->unk_0F0 + player->unk_134) * M_DTOR), 1); Matrix_Translate(gCalcMatrix, 0.0f, player->unk_080, 0, 1); Matrix_Translate(gCalcMatrix, -10.0f, 25.0f, 0.0f, 1); Matrix_RotateX(gCalcMatrix, player->unk_154 * M_DTOR, 1); sp5C.x = 0.0f; sp5C.y = 0.0f; sp5C.z = 0; Matrix_MultVec3f(gCalcMatrix, &sp5C, &sp44); shot->unk_20.x = sp50.x; shot->unk_20.y = sp50.y; shot->unk_20.z = sp50.z; shot->obj.pos.x = player->pos.x + sp44.x; shot->obj.pos.y = player->pos.y + sp44.y; shot->obj.pos.z = player->unk_138 + sp44.z; shot->unk_44 = 1.0f; shot->obj.status = 1; shot->obj.id = objId; shot->unk_64 = 30; shot->unk_58 = 1; shot->playerNum = player->num; } void func_800AD094(Player* player) { s32 i; for (i = 0; i < ARRAY_COUNT(gPlayerShots); i++) { if (gPlayerShots[i].obj.status == 0) { func_800ACDC0(player, &gPlayerShots[i], PLAYERSHOT_6); func_800A5FA0(&player->unk_460, 0x09000014, player->num); player->timer_1F8 = 2; player->unk_180 = 10.0f; break; } } } s32 func_800AD118(s32 playerNum) { Object_2F4* obj2F4; s32 i; for (i = 0, obj2F4 = gObjects2F4; i < ARRAY_COUNT(gObjects2F4); i++, obj2F4++) { if ((obj2F4->obj.status == 2) && (obj2F4->timer_0CA[playerNum] != 0)) { return false; } } if (gVersusMode) { for (i = 0; i < gCamCount; i++) { if (((gPlayer[playerNum].state_1C8 == PLAYERSTATE_1C8_3) || (gPlayer[playerNum].state_1C8 == PLAYERSTATE_1C8_5)) && (D_80177B00[i][playerNum] != 0)) { return false; } } } return true; } bool func_800AD1F4(Player* player) { bool var_a2; s32 i; if (gInputHold->button & A_BUTTON) { gChargeTimers[player->num]++; if (gChargeTimers[player->num] > 21) { gChargeTimers[player->num] = 21; } if (gChargeTimers[player->num] == 20) { func_80060F30(&player->unk_460, 0x0900302D, player->num); } if ((!(gInputHold->button & R_TRIG) || !(gInputHold->button & Z_TRIG) || (player->form != FORM_ARWING) || (player->state_1C8 != PLAYERSTATE_1C8_3)) && !(gFrameCount & 3) && (func_800AD118(player->num) != 0)) { if (gChargeTimers[player->num] >= 21) { for (i = 0; i < 13; i++) { if (gPlayerShots[i].obj.status == 0) { if (player->form == FORM_ARWING) { func_800AC290(player, &gPlayerShots[i], 0.0f, 0.0f, PLAYERSHOT_4, 400.0f); } else { func_800AC650(player, &gPlayerShots[i], PLAYERSHOT_4, 400.0f); } return true; } } } } } else { if (gChargeTimers[player->num] != 0) { gChargeTimers[player->num]--; } } if (gInputPress->button & A_BUTTON) { for (i = 0; i < ARRAY_COUNT(gObjects2F4); i++) { if ((gObjects2F4[i].obj.status == 2) && (gObjects2F4[i].timer_0CA[player->num] != 0)) { if ((gPlayerShots[14 - player->num].obj.status == 0) || (gPlayerShots[14 - player->num].obj.id != PLAYERSHOT_8) || ((gPlayerShots[14 - player->num].obj.id == PLAYERSHOT_8) && (gPlayerShots[14 - player->num].unk_60 != 0))) { if (player->form == FORM_ARWING) { func_800AC290(player, &gPlayerShots[14 - player->num], 0.0f, 0.0f, PLAYERSHOT_8, 70.0f); } else { func_800AC650(player, &gPlayerShots[14 - player->num], PLAYERSHOT_8, 70.0f); } func_80060F30(&player->unk_460, 0x09007029, player->num); D_Timer_80177BD0[player->num] = 5; return true; } break; } } if (gChargeTimers[player->num] > 10) { if ((gPlayerShots[14 - player->num].obj.status == 0) || (gPlayerShots[14 - player->num].obj.id != PLAYERSHOT_8) || ((gPlayerShots[14 - player->num].obj.id == PLAYERSHOT_8) && (gPlayerShots[14 - player->num].unk_44 > 1.0f))) { if (player->form == FORM_ARWING) { func_800AC290(player, &gPlayerShots[14 - player->num], 0.0f, 0.0f, PLAYERSHOT_8, 70.0f); } else { func_800AC650(player, &gPlayerShots[14 - player->num], PLAYERSHOT_8, 70.0f); } func_80060F30(&player->unk_460, 0x09007029, player->num); gChargeTimers[player->num] = 0; D_Timer_80177BD0[player->num] = 5; return true; } } gChargeTimers[player->num] = 0; } if (gInputPress->button & B_BUTTON) { var_a2 = false; for (i = 0; i < ARRAY_COUNT(gObjects2F4); i++) { if ((gObjects2F4[i].obj.status == 2) && (gObjects2F4[i].timer_0CA[player->num] != 0)) { var_a2 = true; break; } } for (i = 0; i < gCamCount; i++) { if (D_80177B00[i][player->num] != 0) { var_a2 = true; break; } } if (var_a2 != 0) { if ((gBombCount[player->num] != 0) && (gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].obj.status == 0)) { gBombCount[player->num]--; if (player->form == FORM_ARWING) { func_800AC290(player, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1], 0.0f, 0.0f, PLAYERSHOT_8, 60.0f); } else { func_800AC650(player, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1], PLAYERSHOT_8, 60.0f); } gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].unk_48 = 30.0f; gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].unk_60 = 0; func_8001CB80(player->num, 1); func_8001CCDC(player->num, &gPlayerShots[ARRAY_COUNT(gPlayerShots) - 1].sfxPos); return true; } } } return false; } void func_800AD7F0(Player* player) { switch (player->form) { case FORM_ARWING: if ((player->wings.rightState <= WINGSTATE_BROKEN) || (player->wings.leftState <= WINGSTATE_BROKEN)) { gLaserStrength[player->num] = 0; } if (func_800AD1F4(player) == 0) { if (gLaserStrength[gPlayerNum] > 0) { Math_SmoothStepToF(&player->wings.unk_14, -10.0f, 1.0f, 0.5f, 0.0f); } else { Math_SmoothStepToF(&player->wings.unk_14, 0.0f, 1.0f, 0.5f, 0.0f); } if (gShootButton[player->num] & gInputPress->button) { func_800ACABC(player); player->timer_244 = 8; } if (player->timer_244 != 0) { player->timer_244--; if ((gShootButton[player->num] & gInputHold->button) && !(player->timer_244 & 3)) { func_800ACABC(player); } } func_800ACC7C(player); } break; case FORM_LANDMASTER: if (func_800AD1F4(player) == 0) { if (gShootButton[player->num] & gInputPress->button) { func_800ACA40(player); } func_800ACC7C(player); } break; case FORM_ON_FOOT: if (gInputPress->button & A_BUTTON) { player->timer_244 = 0; } if (gInputHold->button & A_BUTTON) { if (player->timer_244 == 0) { func_800AD094(player); } player->timer_244++; if (player->timer_244 > 4) { player->timer_244 = 0; } } func_800ACC7C(player); break; } } void func_800ADA28(Player* player) { f32 sp3C; f32 sp38; sp3C = 0.0f; if ((player->wings.rightState <= WINGSTATE_BROKEN) && (player->wings.leftState == WINGSTATE_INTACT)) { sp3C = -17.0f; } else if ((player->wings.leftState <= WINGSTATE_BROKEN) && (player->wings.rightState == WINGSTATE_INTACT)) { sp3C = 17.0f; } sp38 = 0.1f; if ((gInputHold->button & Z_TRIG) && !(gInputHold->button & R_TRIG)) { sp3C = 90.0f; sp38 = 0.2f; if (player->unk_12C < 70.0f) { Math_SmoothStepToF(&player->wings.unk_04, -70.0f, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, -70.0f, 0.3f, 100.0f, 0.f); Math_SmoothStepToF(&player->wings.unk_0C, 70.0f, 0.3f, 100.0f, 0.f); Math_SmoothStepToF(&player->wings.unk_10, 70.0f, 0.3f, 100.0f, 0.f); if (player->pos.y < (D_80177940 + 70.0f)) { player->pos.y += 6.0f; } } } if ((gInputHold->button & R_TRIG) && !(gInputHold->button & Z_TRIG)) { sp3C = -90.0f; sp38 = 0.2f; if (player->unk_12C > -70.0f) { Math_SmoothStepToF(&player->wings.unk_04, 70.0f, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, 70.0f, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, -70.0f, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, -70.0f, 0.3f, 100.0f, 0.0f); if (player->pos.y < (D_80177940 + 70.0f)) { player->pos.y += 6.0f; } } } Math_SmoothStepToF(&player->unk_12C, sp3C, sp38, 10.0f, 0.f); if (gInputPress->button & Z_TRIG) { player->unk_48C = 1; if (player->timer_1E0 != 0) { player->unk_1DC = 1; player->timer_1E8 = 10; player->unk_1EC = player->unk_1F0 = 30; player->unk_494 = 1; } else { player->timer_1E0 = 10; } } if (gInputPress->button & R_TRIG) { player->unk_48C = 1; if (player->timer_1E4 != 0) { player->unk_1DC = 1; player->timer_1E8 = 10; player->unk_1EC = player->unk_1F0 = -30; player->unk_494 = 1; } else { player->timer_1E4 = 10; } } } void func_800ADD98(Player* player) { Math_SmoothStepToF(&player->unk_170, 0.0f, 1.0f, 0.2f, 0.0f); Math_SmoothStepToF(&player->unk_16C, 0.0f, 1.0f, 0.2f, 0.0f); if (gInputPress->button & Z_TRIG) { if ((player->timer_1E0 != 0) && (player->unk_12C > 0.0f) && (player->unk_2BC < 10.0f)) { player->unk_1DC = 1; player->timer_1E8 = 15; player->unk_1EC = player->unk_1F0 = 20; } else { player->timer_1E0 = 10; } } if (gInputPress->button & R_TRIG) { if ((player->timer_1E4 != 0) && (player->unk_12C < 0.0f) && (player->unk_2BC < 10.0f)) { player->unk_1DC = 1; player->timer_1E8 = 15; player->unk_1EC = player->unk_1F0 = -20; } else { player->timer_1E4 = 10; } } player->unk_18C = fabsf(__sinf(player->unk_12C * M_DTOR) * 25.0f); player->unk_18C += fabsf(__sinf(player->unk_130 * M_DTOR) * 20.0f); } void func_800ADF58(Player* player) { f32 temp_fv0; f32 temp_fv0_2; s32 temp_v0; player->unk_140 = -player->vel.z; player->unk_144 += -player->vel.z; D_80177D08 = -player->vel.z; D_80177D20 = player->unk_144; D_80177CE8 += player->unk_140; if (D_801784AC == 4) { D_80177CC8 = player->unk_140; } if ((D_80178284 == 0) && (player->unk_144 > 500000.0f)) { player->unk_144 = 0.0f; player->pos.z = 0.0f; D_80177DC8 = 0; func_800A6148(); } player->unk_138 = player->pos.z + player->unk_08C; player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130; while (1) { if (player->unk_0F8 > 360.0f) { player->unk_0F8 -= 360.0f; } else { break; } } while (1) { if (player->unk_0F8 < -360.0f) { player->unk_0F8 += 360.0f; } else { break; } } if (gCurrentLevel == LEVEL_UNK_15) { Math_SmoothStepToF(&player->unk_0B4, 10.0f, 0.1f, 0.5f, 0.0001f); player->pos.x += Math_SmoothStepToF(&player->unk_0AC, player->unk_0B8, 0.1f, player->unk_0B4, 0.0001f); player->pos.y += Math_SmoothStepToF(&player->unk_0B0, player->unk_0BC, 0.1f, player->unk_0B4, 0.0001f); } else { Math_SmoothStepToF(&player->unk_0B4, D_80177D08 * 0.54f, 0.1f, 2.0f, 0.0001f); D_801779E4 = Math_SmoothStepToF(&player->unk_0AC, player->unk_0B8, 0.1f, player->unk_0B4, 0.0001f); D_801779F4 = Math_SmoothStepToF(&player->unk_0B0, player->unk_0BC, 0.1f, player->unk_0B4, 0.0001f); } if (player->timer_210 != 0) { player->timer_210--; Math_SmoothStepToF(&player->unk_114, player->unk_118, 0.03f, 0.5f, 0.0001f); Math_SmoothStepToF(&player->unk_120, player->unk_124, 0.03f, 0.5f, 0.0001f); } else { Math_SmoothStepToF(&player->unk_114, 0.0f, 0.03f, 0.5f, 0.0001f); Math_SmoothStepToF(&player->unk_120, 0.0f, 0.03f, 0.5f, 0.0001f); } } void func_800AE278(Player* player) { f32 var_fv1; bool var_v0 = false; if (gCamCount != 1) { if (player->pos.x > 12000.0f) { var_v0 = true; player->pos.x -= 24000.0f; player->camEye.x -= 24000.0f; player->camAt.x -= 24000.0f; } if (player->pos.x < -12000.0f) { var_v0 = true; player->pos.x += 24000.0f; player->camEye.x += 24000.0f; player->camAt.x += 24000.0f; } if (player->pos.z > 12000.0f) { var_v0 = true; player->pos.z -= 24000.0f; player->camEye.z -= 24000.0f; player->camAt.z -= 24000.0f; } if (player->pos.z < -12000.0f) { var_v0 = true; player->pos.z += 24000.0f; player->camEye.z += 24000.0f; player->camAt.z += 24000.0f; } if (var_v0) { D_80177B00[player->num][0] = D_80177B00[player->num][1] = D_80177B00[player->num][2] = D_80177B00[player->num][3] = 0; } } else { var_fv1 = 12500.0f; if (gCurrentLevel == LEVEL_CORNERIA) { var_fv1 = 8000.0f; } else if (gCurrentLevel == LEVEL_BOLSE) { var_fv1 = 10000.0f; } else if (gCurrentLevel == LEVEL_SECTOR_Z) { var_fv1 = 20000.0f; } else if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) && (D_80177AB0 >= 4)) { var_fv1 = 100000.0f; } if ((var_fv1 < fabsf(player->pos.x)) || (var_fv1 < fabsf(player->pos.z))) { player->state_1C8 = PLAYERSTATE_1C8_5; player->unk_19C = 0; player->unk_1D0 = 0; player->unk_000 = 0.0f; player->unk_004 = 0.0f; } } } void func_800AE4A4(Player* player) { f32 sp7C; f32 sp78; f32 var_fa0; f32 var_fa1; f32 var_fv0; f32 var_fv1; f32 temp; f32 sp60; f32 sp5C; f32 sp58; Vec3f sp4C; Vec3f sp40; D_80177968 = 2.3f; D_80177970 = 0.68f; sp7C = -gInputPress->stick_x; sp78 = gInputPress->stick_y; Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 5.0f, 0.01f); Matrix_RotateZ(gCalcMatrix, -player->unk_12C * M_DTOR, 0); sp4C.x = sp7C * 0.75f; sp4C.y = sp78 * 0.75f; sp4C.z = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp4C, &sp40); sp60 = sp40.y; sp5C = sp58 = 0.0f; if (sp40.x < -5.0f) { sp5C = -sp40.x; } if (sp40.x > 5.0f) { sp58 = sp40.x; } Math_SmoothStepToF(&player->wings.unk_28, 0.0f, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_04, -sp60 + sp5C, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, -sp60 - sp5C, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, -sp60 + sp58, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, -sp60 - sp58, 0.1f, 100.0f, 0.0f); var_fa0 = 0.1f; if ((player->unk_12C > 10.0f) && (sp7C > 0)) { D_80177968 *= 2.0f; var_fa0 = 0.2f; } if ((player->unk_12C < -10.0f) && (sp7C < 0)) { D_80177968 *= 2.0f; var_fa0 = 0.2f; } Math_SmoothStepToF(&player->unk_0E8, sp7C * D_80177970, var_fa0, D_80177968, 0.03f); var_fa0 = 0.03f; if ((player->unk_12C > 10.0f) && (sp7C > 0)) { var_fa0 = 0.05f; } if ((player->unk_12C < -10.0f) && (sp7C < 0)) { var_fa0 = 0.05f; } Math_SmoothStepToF(&player->unk_11C, player->unk_0E8 * var_fa0, 0.1f, 0.8f, 0.05f); player->unk_114 += player->unk_11C; if (player->unk_114 >= 360.0f) { player->unk_114 -= 360.0f; } if (player->unk_114 < 0.0f) { player->unk_114 += 360.0f; } D_80177968 = 2.3f; var_fa1 = 0.1f; temp = -sp78 * D_80177970; if ((temp <= 0.0f) && (player->pos.y < (D_80177940 + 50.0f))) { D_80177968 *= 2.0f; temp = 0.0f; var_fa1 = 0.2f; } Math_SmoothStepToF(&player->unk_0E4, temp, var_fa1, D_80177968, 0.03f); var_fv1 = 1.5f; if (player->pos.y < (D_80177940 + 70.0f)) { var_fv1 = 0.8f; } if (!(((gInputHold->button & R_TRIG) && (gInputHold->button & Z_TRIG)) || (!(gInputHold->button & R_TRIG) && !(gInputHold->button & Z_TRIG)))) { var_fv1 = 0.1f; } var_fv0 = 4.0f; if (sp7C == 0) { var_fv0 = 1.0f; } Math_SmoothStepToF(&player->unk_0EC, sp7C * 0.6f * var_fv1, 0.1f, var_fv0, 0.03f); player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130; 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); sp4C.x = 0.0f; sp4C.y = 0.0f; if (player->wings.rightState <= WINGSTATE_BROKEN) { sp4C.x -= 2.5f; sp4C.y -= 2.5f; } if (player->wings.leftState <= WINGSTATE_BROKEN) { sp4C.x += 2.5f; sp4C.y -= 2.5f; } sp4C.z = player->unk_0D0 + player->unk_110; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp4C, &sp40); player->vel.x = sp40.x; player->vel.z = sp40.z; player->vel.y = sp40.y; player->pos.x += player->vel.x; player->pos.y += player->vel.y; if ((player->unk_0A0 < player->pos.y) && (player->vel.y >= 0.0f)) { Math_SmoothStepToF(&player->pos.y, player->unk_0A0, 0.1f, fabsf(player->vel.y * 1.5f) + 5.0f, 0.0f); } if ((player->pos.y < player->unk_0A4) && (player->vel.y <= 0.0f)) { if (player->unk_0A4 >= 0.0f) { player->pos.y = player->unk_0A4; } else { Math_SmoothStepToF(&player->pos.y, player->unk_0A4, 0.1f, fabsf(player->vel.y * 1.5f) + 5.0f, 0.0f); } } player->pos.z += player->vel.z; if (player->unk_0A0 - 100.0f < player->pos.y) { player->unk_228 = 8; } if (player->pos.y < -(player->unk_0A0 - 100.0f)) { player->unk_228 = 4; } func_800AE278(player); player->unk_138 = player->pos.z; func_800A4460(player); func_800A46A0(player); } void func_800AECAC(Player* player) { f32 temp; f32 sp58; Vec3f sp4C; Vec3f sp40; sp58 = 60.0f; if (gVersusMode) { D_80177B00[player->num][0] = D_80177B00[player->num][1] = D_80177B00[player->num][2] = D_80177B00[player->num][3] = 0; } if (player->unk_4D8 > 240.0f) { sp58 = -50.0f; } Math_SmoothStepToF(&player->wings.unk_04, sp58, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, sp58, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, sp58, 0.3f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, sp58, 0.3f, 100.0f, 0.0f); if (player->unk_4D8 < 180.0f) { player->pos.y += 2.0f; } player->unk_2B4 = 1; if (gLevelMode == LEVELMODE_ON_RAILS) { player->unk_2BC += 2.0f; } else { player->unk_2BC += 1.0f; } if (player->unk_2BC > 90.0f) { player->unk_2BC = 90.0f; } player->unk_190 = 2; Math_SmoothStepToF(&player->unk_4D8, 360.0f, 0.1f, 5.0f, 0.001f); if (player->unk_4D8 > 350.0f) { player->unk_4DC = 0; if (gLevelMode != LEVELMODE_ON_RAILS) { player->unk_018 = 0.05f; player->unk_014 = 0.05f; } else { player->unk_238 = player->unk_198; if (player->unk_238 != 0) { player->unk_014 = 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); temp = -gInputPress->stick_x * 0.68f; Math_SmoothStepToF(&player->unk_0E8, temp, 0.1f, 2.0f, 0.0f); player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130; 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); sp4C.x = 0.0f; sp4C.y = 0.0f; sp4C.z = player->unk_0D0; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp4C, &sp40); player->vel.x = sp40.x; player->vel.z = sp40.z; player->vel.y = sp40.y; player->pos.x += player->vel.x; player->pos.y += player->vel.y; if (player->pos.y < player->unk_0A4 + player->unk_0B0) { player->pos.y = player->unk_0A4 + player->unk_0B0; player->vel.y = 0.0f; } player->pos.z += player->vel.z; player->unk_138 = player->pos.z; func_800A46A0(player); } #ifdef NON_MATCHING // baffling control flow // https://decomp.me/scratch/5Iel8 void func_800AF07C(Player* player) { f32 sp9C; f32 sp98; f32 var_fa0; f32 var_fa1; f32 var_fv0; f32 var_fv1; f32 sp84; s32 temp; f32 sp7C; f32 sp78; f32 sp74; Vec3f sp68; Vec3f sp5C; Vec3f sp50; Vec3f sp44; D_80177968 = 2.3f; D_80177970 = 0.68f; if ((gInputPress->stick_x == 0) && (gInputPress->stick_y == 0)) { // wut } else { } sp9C = -gInputPress->stick_x; sp98 = gInputPress->stick_y; Math_SmoothStepToAngle(&player->unk_4D8, 0.0f, 0.1f, 5.0f, 0.01f); if (player->unk_238 != 0) { Matrix_RotateZ(gCalcMatrix, player->unk_12C * M_DTOR, 0); sp68.z = 0.0f; sp68.x = sp9C; sp68.y = sp98; Matrix_MultVec3f(gCalcMatrix, &sp68, &sp5C); sp9C = sp5C.x; sp98 = sp5C.y; } else { Matrix_RotateZ(gCalcMatrix, -player->unk_12C * M_DTOR, 0); sp68.z = 0.0f; sp68.x = sp9C * 0.75f; sp68.y = sp98 * 0.75f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp5C); sp7C = sp5C.y; sp78 = sp74 = 0.0f; if (sp5C.x < -5.0f) { sp78 = -sp5C.x; } if (sp5C.x > 5.0f) { sp74 = sp5C.x; } Math_SmoothStepToF(&player->wings.unk_28, 0.0f, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_04, -sp7C + sp78, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, -sp7C - sp78, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, -sp7C + sp74, 0.1f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, -sp7C - sp74, 0.1f, 100.0f, 0.0f); } sp84 = 0.1f; if ((player->unk_12C > 10.0f) && (sp9C > 0)) { sp84 = 0.2f; D_80177968 *= 2.0f; } if ((player->unk_12C < -10.0f) && (sp9C < 0)) { sp84 = 0.2f; D_80177968 *= 2.0f; } if (player->unk_1DC != 0) { sp84 = 0.2f; D_80177968 = 6.8999996f; } Math_SmoothStepToF(&player->unk_0E8, sp9C * D_80177970, sp84, D_80177968, 0.03f); D_80177968 = 2.3f; sp84 = 0.1f; var_fa1 = -sp98 * D_80177970; if ((var_fa1 <= 0.0f) && (player->pos.y < (D_80177940 + 50.0f))) { var_fa1 = 0.0f; sp84 = 0.2f; D_80177968 *= 2.0f; } Math_SmoothStepToF(&player->unk_0E4, var_fa1, sp84, D_80177968, 0.03f); var_fv1 = 1.0f; if (player->pos.y < (D_80177940 + 70.0f)) { var_fv1 = 0.8f; } if (!(((gInputHold->button & R_TRIG) && (gInputHold->button & Z_TRIG)) || (!(gInputHold->button & R_TRIG) && !(gInputHold->button & Z_TRIG)))) { var_fv1 = 0.1f; } var_fv0 = 4.0f; if (sp9C == 0) { var_fv0 = 1.0f; } Math_SmoothStepToF(&player->unk_0EC, sp9C * 0.6f * var_fv1, 0.1f, var_fv0, 0.03f); Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + 180.0f) * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, -((player->unk_0E4 + player->unk_4D8) * M_DTOR), 1); sp68.x = 0.0f; sp68.y = 0.0f; sp68.z = player->unk_0D0; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp44); sp44.x *= 1.4f; sp44.y *= 1.4f; Matrix_RotateY(gCalcMatrix, player->unk_114 * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, player->unk_120 * M_DTOR, 1); Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp5C); sp68.x = 0.0f; sp68.y = 0.0f; sp68.z = -player->unk_110; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp50); player->vel.x = (sp5C.x + sp50.x) * player->unk_150; player->vel.y = (sp5C.y + sp50.y) * player->unk_150; player->vel.z = sp5C.z + sp50.z; if (gCurrentLevel == LEVEL_VENOM_ANDROSS) { player->vel.z += D_E9F1D0_801A7F58; } sp68.x = 0.0f; sp68.y = 0.0f; sp68.z = -player->unk_110; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp68, &sp50); if (player->wings.rightState <= WINGSTATE_BROKEN) { player->vel.x += 2.5f; player->vel.y -= 2.5f; } if (player->wings.leftState <= WINGSTATE_BROKEN) { player->vel.x -= 2.5f; player->vel.y -= 2.5f; } if (player->pos.x > (player->unk_0AC + (player->unk_09C - 100.0f))) { player->unk_228 = 1; } if (player->pos.x < (player->unk_0AC - (player->unk_09C - 100.0f))) { player->unk_228 = 2; } if (player->pos.y > (player->unk_0B0 + (player->unk_0A0 - 100.0f))) { player->unk_228 = 8; } if (player->pos.y < (player->unk_0B0 - (player->unk_0A0 - 100.0f))) { player->unk_228 = 4; } player->pos.x += player->vel.x; if (player->pos.x > (player->unk_09C + player->unk_0AC)) { player->pos.x = player->unk_09C + player->unk_0AC; player->vel.x = 0.0f; player->unk_0D8.x = 0.0f; } if (player->pos.x < (player->unk_0AC - player->unk_09C)) { player->pos.x = player->unk_0AC - player->unk_09C; player->vel.x = 0.0f; player->unk_0D8.x = 0.0f; } player->pos.y += player->vel.y; if (player->pos.y > (player->unk_0A0 + player->unk_0B0)) { player->pos.y = player->unk_0A0 + player->unk_0B0; player->vel.y = 0.0f; player->unk_0D8.y = 0.0f; } if (player->pos.y < (player->unk_0A4 + player->unk_0B0)) { player->pos.y = player->unk_0A4 + player->unk_0B0; player->vel.y = 0.0f; player->unk_0D8.y = 0.0f; } player->pos.z += player->vel.z; func_800A4460(player); } #else void func_800AF07C(Player* player); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/fox_play/func_800AF07C.s") #endif void func_800AF928(Player* player) { f32 sp5C; f32 var_fa0; f32 var_fa1; f32 var_fv1; Vec3f sp44; Vec3f sp38; var_fv1 = (gInputPress->stick_y * 0.7f) - 8.0f; if (var_fv1 < -40.0f) { var_fv1 = -40.0f; } if (var_fv1 > 0) { var_fv1 = 0; } if (var_fv1 > player->unk_17C) { player->unk_17C += 3.0f; } if (var_fv1 < player->unk_17C) { player->unk_17C -= 3.0f; } if (player->unk_180 < 0) { player->unk_180 += 3.0f; } if (player->unk_180 > 0) { player->unk_180 -= 3.0f; } D_80177968 = 3.0f; D_80177970 = 0.6666f; sp5C = gInputPress->stick_x; if (sp5C == 0) { Math_SmoothStepToF(&player->unk_0E8, -sp5C * D_80177970, 0.1f, D_80177968 * 0.5f, 0.1f); } else { Math_SmoothStepToF(&player->unk_0E8, -sp5C * D_80177970, 0.1f, D_80177968, 0.1f); } player->unk_108 = player->unk_0E8; var_fa0 = 0.03f; var_fa1 = 1.5f; if ((player->unk_12C > 10.0f) && (sp5C < 0.0f)) { var_fa0 = 0.1f; var_fa1 = 4.0f; } if ((player->unk_12C < -10.0f) && (sp5C > 0.0f)) { var_fa0 = 0.1f; var_fa1 = 4.0f; } if (player->unk_1DC != 0) { if ((player->unk_1EC > 0) && (sp5C < 0.0f)) { var_fa0 = 0.2f; var_fa1 = 20.0f; } if ((player->unk_1EC < 0) && (sp5C > 0.0f)) { var_fa0 = 0.2f; var_fa1 = 20.0f; } } Math_SmoothStepToF(&player->unk_11C, player->unk_0E8 * var_fa0, 0.1f, var_fa1, 0.05f); player->unk_114 += player->unk_11C; player->unk_114 = Math_ModF(player->unk_114, 360.0f); Matrix_RotateX(gCalcMatrix, player->unk_104 * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, player->unk_10C * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 1); sp44.x = 0.0f; sp44.y = 0.0f; sp44.z = player->unk_0D0; sp44.z -= fabsf((player->unk_184 * 0.4f * player->unk_0D0) / 15.0f); sp44.z += __sinf(player->unk_000 * M_DTOR) * player->unk_110; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->vel.x = sp38.x; player->vel.z = sp38.z; if (player->unk_16C > 0.2f) { Math_SmoothStepToF(&player->unk_184, player->unk_0D0 * 0.5f, 1.0f, 1.0f, 0); } if (player->unk_170 > 0.2f) { Math_SmoothStepToF(&player->unk_184, -player->unk_0D0 * 0.5f, 1.0f, 1.0f, 0); } if (!(player->unk_170 > 0.2f) && !(player->unk_16C > 0.2f) && (player->unk_1D4 != 0)) { Math_SmoothStepToF(&player->unk_184, 0.0f, 1.0f, 0.75f, 0.0f); } if (player->unk_1DC != 0) { if (player->unk_1EC < 0) { player->unk_184 = 15.0f; } if (player->unk_1EC > 0) { player->unk_184 = -15.0f; } } sp44.x = -player->unk_184; sp44.y = 0; sp44.z = 0; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); player->pos.x += sp38.x; player->pos.z += sp38.z; player->pos.x += player->vel.x; player->vel.y -= player->unk_0D4; player->pos.y += player->vel.y; if (player->unk_1D4 != 0) { Math_SmoothStepToAngle(&player->unk_0E4, player->unk_104, 0.2f, 5.0f, 0.005f); Math_SmoothStepToAngle(&player->unk_0EC, player->unk_10C, 0.2f, 5.0f, 0.005f); Math_SmoothStepToF(&player->unk_000, 0.0f, 0.1f, 5.0f, 0.00001f); } player->unk_1D4 = 0; if (player->pos.y <= D_80177940 - 5.0f) { player->pos.y = D_80177940 - 5.0f; if (player->vel.y < -20.0f) { player->unk_1F4 = 20; } player->vel.y = 0.0f; player->unk_1D4 = 1; } if (player->vel.y < -80.0f) { player->vel.y = -80.0f; } if (player->vel.y > 20.0f) { player->vel.y = 20.0f; } player->pos.z += player->vel.z; func_800AE278(player); player->unk_138 = player->pos.z; player->unk_0F8 = player->unk_0EC + player->unk_12C + player->unk_130; if (player->unk_1D4 != 0) { player->unk_0F4 += player->unk_0D0 * 5.0f; player->unk_0F0 = __sinf(player->unk_0F4 * M_DTOR) * 0.7f; } func_800A46A0(player); } void func_800B00C0(Player* player) { f32 sp2C = 0.0f; f32 sp28 = 0.7f; f32 sp24 = 0.1f; if (gInputHold->button & R_TRIG) { sp2C = 16.0f; sp28 = D_800D30F4[gPlayerNum]; sp24 = D_800D3104[gPlayerNum]; } Math_SmoothStepToF(&player->unk_0D0, sp2C, 1.0f, 1.0f, 0.00001f); Math_SmoothStepToF(&player->unk_008, sp28, 0.1f, sp24, 0.00001f); } void func_800B0194(Player* player) { Vec3f sp78[30]; f32 sp74; f32 sp70; f32 var_fv0; f32 var_fa0; f32 sp64; Vec3f sp58; Vec3f sp4C; Vec3f* sp48; s32 sp44; s32 pad; player->unk_034 = 0.0f; var_fa0 = 0.0f; if (player->pos.y > 10.0f) { var_fa0 = 20.0f; } if (player->pos.y > 300.0f) { var_fa0 = 40.0f; } sp74 = gInputPress->stick_y * 0.8f; if (sp74 < -40.0f) { sp74 = -40.0f; } if (var_fa0 < sp74) { sp74 = var_fa0; } Math_SmoothStepToF(&player->unk_154, sp74, 0.1f, 3.0f, 0.00001f); Math_SmoothStepToF(&player->unk_180, 0.0f, 0.15f, 5.0f, 0.00001f); Math_SmoothStepToF(&player->unk_158, sp74, 0.2f, 5.0f, 0.00001f); D_80177968 = 3.0f; D_80177970 = 0.666f; sp74 = gInputPress->stick_x; sp70 = gInputPress->stick_y; Math_SmoothStepToF(&player->unk_0E8, -sp74 * D_80177970 * 0.6f, 0.5f, D_80177968, 0.001f); Math_SmoothStepToF(&player->unk_0EC, -sp74 * D_80177970 * 0.2f * player->unk_0D0 / 15.0f, 0.2f, 5.0f, 0.001f); player->unk_0F8 = player->unk_0EC; if ((sp74 != 0.0f) || (sp70 != 0.0f)) { Math_SmoothStepToF(&player->unk_15C, sp74 * D_80177970, 0.9f, 2.0f * D_80177968, 0.1f); Math_SmoothStepToF(&player->unk_164, sp74 * 0.3f, 0.1f, 10.0f, 0.00001f); Math_SmoothStepToF(&player->unk_168, -sp74 * 0.3f, 0.1f, 10.0f, 0.00001f); } else { if (((gFrameCount & 0xF) == 0) && (Rand_ZeroOne() < 0.5f)) { player->unk_17C = (Rand_ZeroOne() - 0.5f) * 100.0f; } if (((gFrameCount & 0xF) == 3) && (Rand_ZeroOne() < 0.5f)) { player->unk_174 = (Rand_ZeroOne() - 0.2f) * 50.0f; } if (((gFrameCount & 0xF) == 10) && (Rand_ZeroOne() < 0.5f)) { player->unk_178 = (Rand_ZeroOne() - 0.2f) * 50.0f; } Math_SmoothStepToF(&player->unk_15C, player->unk_17C, 0.15f, 10.0f, 0.00001f); Math_SmoothStepToF(&player->unk_164, player->unk_174, 0.1f, 10.0f, 0.00001f); Math_SmoothStepToF(&player->unk_168, player->unk_178, 0.1f, 10.0f, 0.00001f); } player->unk_108 = player->unk_0E8; if (player->unk_0D0 < 1.5f) { var_fv0 = 0.12f; var_fa0 = 3.0f; } else { var_fv0 = 0.08f; var_fa0 = 1.5f; } Math_SmoothStepToF(&player->unk_11C, -sp74 * D_80177970 * var_fv0, 0.2f, var_fa0, 0.0f); player->unk_114 += player->unk_11C; player->unk_114 = Math_ModF(player->unk_114, 360.0f); Matrix_RotateX(gCalcMatrix, player->unk_104 * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, player->unk_10C * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_114 + player->unk_0E8 + 180.0f) * M_DTOR, 1); sp58.x = 0.0f; sp58.y = 0.0f; sp58.z = player->unk_0D0; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp58, &sp4C); player->vel.x = sp4C.x; player->vel.z = sp4C.z; player->pos.x += player->vel.x; if ((player->pos.y < 40.0f) || (player->pos.y > 670.0f)) { player->unk_10C = 0.0f; player->unk_104 = 0.0f; } Math_SmoothStepToAngle(&player->unk_0FC, player->unk_104, 0.15f, 15.0f, 0.005f); Math_SmoothStepToAngle(&player->unk_100, player->unk_10C, 0.15f, 15.0f, 0.005f); if (player->unk_1D4 != 0) { if (player->unk_0D0 > 1.0f) { player->unk_00C += player->unk_008; if ((s32) player->unk_00C >= Animation_GetFrameCount(&D_301CFEC)) { player->unk_00C = 0.0f; } player->unk_080 = 2.0f * __sinf((player->unk_20C + 7) * 24.0f * M_DTOR); if (player->unk_080 < -0.5f) { player->unk_080 = -0.5f; } player->unk_080 -= 3.0f; player->unk_20C = player->unk_00C; switch (gPlayerNum) { case 0: sp44 = Animation_GetFrameData(&D_301CFEC, player->unk_20C, sp78); break; case 1: sp44 = Animation_GetFrameData(&D_301D888, player->unk_20C, sp78); break; case 2: sp44 = Animation_GetFrameData(&D_301E19C, player->unk_20C, sp78); break; case 3: sp44 = Animation_GetFrameData(&D_301C3A8, player->unk_20C, sp78); break; } Math_SmoothStepToVec3fArray(sp78, player->jointTable, 1, sp44, 1.0f, player->unk_010, 0.01f); if (player->unk_010 < 50.0f) { player->unk_010 += 2.0f; } sp64 = player->unk_0D0; if (gFrameCount & 4) { sp64 = 2.0f * player->unk_0D0; } Math_SmoothStepToF(&player->unk_164, sp64, 0.5f, 20.0f, 0.0001f); Math_SmoothStepToF(&player->unk_168, sp64, 0.5f, 20.0f, 0.0001f); } else { if (player->unk_010 > 0.0f) { player->unk_010 -= 5.0f; if (player->unk_010 <= 0.0f) { player->unk_010 = 0.0f; } } switch (gPlayerNum) { case 0: sp48 = SEGMENTED_TO_VIRTUAL(D_302E56C); break; case 1: sp48 = SEGMENTED_TO_VIRTUAL(D_302E830); break; case 2: sp48 = SEGMENTED_TO_VIRTUAL(D_302E74C); break; case 3: sp48 = SEGMENTED_TO_VIRTUAL(D_302E65C); break; } Math_SmoothStepToVec3fArray(sp48, player->jointTable, 1, 0x18, 0.2f, 10.0f, 0.01f); Math_SmoothStepToF(&player->unk_080, -3.0f, 0.1f, 2.0f, 0.1f); Math_SmoothStepToF(&player->unk_164, 0.0f, 0.03f, 1.0f, 0.0001f); Math_SmoothStepToF(&player->unk_168, 0.0f, 0.03f, 1.0f, 0.0001f); player->unk_20C = 0; player->unk_00C = 0.0f; } } if (player->unk_1D4 == 0) { switch (gPlayerNum) { case 0: sp48 = SEGMENTED_TO_VIRTUAL(D_302E95C); break; case 1: sp48 = SEGMENTED_TO_VIRTUAL(D_302EC20); break; case 2: sp48 = SEGMENTED_TO_VIRTUAL(D_302EB3C); break; case 3: sp48 = SEGMENTED_TO_VIRTUAL(D_302EA4C); break; } Math_SmoothStepToVec3fArray(sp48, player->jointTable, 1, 0x18, 0.2f, 10.0f, 0.01f); } player->unk_0D4 = 2.0f; if ((gInputPress->button & Z_TRIG) && (player->unk_1D4 != 0)) { player->vel.y = 12.0f; } if ((gInputHold->button & Z_TRIG) && (player->vel.y > 0.0f)) { player->unk_0D4 = 1.5f; } player->unk_1D4 = 0; player->vel.y -= player->unk_0D4; player->pos.y += player->vel.y; if (player->pos.y <= D_80177940) { player->unk_1D4 = 1; player->pos.y = 0.0f; player->vel.y = 0.0f; player->unk_0E4 += (player->pos.y - player->unk_0E4) * 0.05f; } if (player->vel.y < -50.0f) { player->vel.y = -50.0f; } if (player->vel.y > 20.0f) { player->vel.y = 20.0f; } player->pos.z += player->vel.z; func_800AE278(player); player->unk_138 = player->pos.z; } void func_800B0F50(Player* playerx) { s32 j; Vec3f* sp38; ObjectInit* sp34; s32 i; s16 sp2E; Player* player = playerx; // fake? D_80177BAC = 0; player->shields = 0xFF; if (gVersusMode) { switch (gHandicap[gPlayerNum]) { case 1: player->shields = 0xBF; break; case 2: player->shields = 0x7F; break; } } player->wings.rightState = WINGSTATE_INTACT; player->wings.leftState = WINGSTATE_INTACT; if (gExpertMode) { gLeftWingHealth[gPlayerNum] = 10; gRightWingHealth[gPlayerNum] = 10; } else { gLeftWingHealth[gPlayerNum] = 60; gRightWingHealth[gPlayerNum] = 60; } D_Timer_80177A00[gPlayerNum] = D_Timer_80177A38[gPlayerNum] = D_Timer_80177A70[gPlayerNum] = D_Timer_80177A88[gPlayerNum] = D_80177AE8[gPlayerNum] = D_80177AD0[gPlayerNum] = gChargeTimers[gPlayerNum] = D_80177B00[gPlayerNum][0] = D_80177B00[gPlayerNum][1] = D_80177B00[gPlayerNum][2] = D_80177B00[gPlayerNum][3] = 0; D_80177D40[gPlayerNum] = D_80177D58[gPlayerNum] = D_80177D70[gPlayerNum] = D_80177D88[gPlayerNum] = D_80177990[gPlayerNum] = D_801779A8[gPlayerNum] = D_80177AA0[gPlayerNum] = 0.0f; D_80177AB8[gPlayerNum] = 0.0f; player->unk_190 = 1.0f; player->unk_194 = 1.0f; gRadioState = D_80177D68 = D_801782A4 = 0; D_8017853C = D_80177D50 = 0.0f; player->camEye.z = 400.0f; player->unk_148 = 0.77699995f; player->unk_14C = 0.77699995f; player->unk_01C = 1.0f; player->unk_068 = -1000.0f; player->camAt.z = player->camEye.z - 1000.0f; D_80177950 = 1.0f; if ((gLevelType == LEVELTYPE_SPACE) && (gCurrentLevel != LEVEL_BOLSE)) { player->unk_240 = 1; player->unk_0A8 = 3000.0f; player->unk_09C = 700.0f; player->unk_0A0 = 612.0f; player->unk_0A4 = -544.0f; if (gCurrentLevel == LEVEL_UNK_15) { player->unk_0A0 = 3000.0f; player->unk_0A4 = -3000.0f; } } else { player->unk_09C = 700.0f; player->unk_0A0 = 680.0f; player->unk_0A4 = D_80177940 + 40.0f; player->unk_0A8 = 3000.0f; } player->unk_0D0 = D_80161A54; player->pos.y = 350.0f; switch (gCurrentLevel) { case LEVEL_MACBETH: case LEVEL_TITANIA: player->form = FORM_LANDMASTER; player->unk_014 = 1.0f; player->unk_14C = 0.67f; player->unk_148 = 0.67f; player->unk_0D0 = 15.0f; player->unk_0D4 = 3.0f; player->unk_09C = 500.0f; player->unk_0A0 = 500.0f; player->unk_0A4 = -500.0f; if (gCurrentLevel == LEVEL_TITANIA) { player->pos.y = 150.0f; } else { player->pos.y = 0.0f; } break; case LEVEL_AQUAS: player->form = FORM_BLUE_MARINE; player->unk_0D4 = 0.0f; player->unk_09C = 700.0f; player->unk_0D0 = 20.0f; player->unk_0A0 = 720.0f; player->unk_0A4 = D_80177940 + 30.0f; break; case LEVEL_SOLAR: case LEVEL_ZONESS: player->unk_0A4 = -450.0f; break; } if (gCurrentLevel != LEVEL_CORNERIA) { D_80161A8C = 0; } gGoldRingCount[0] = D_80161A94[0]; do { if (gGoldRingCount[0] > 3) { gGoldRingCount[0] -= 3; } } while (gGoldRingCount[0] > 3); if (gGoldRingCount[0] == 3) { gGoldRingCount[0] = 0; } gHitCount = gSavedHitCount; if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) || ((gCurrentLevel == LEVEL_VENOM_2) && (D_8017827C == 2))) { if (D_80177C9C != 0) { player->shields = D_80177C9C - 1; gGoldRingCount[0] = D_80177C94; player->wings.rightState = D_80177CAC; player->wings.leftState = D_80177CB4; gRightWingHealth[0] = D_80177CBC; gLeftWingHealth[0] = D_80177CC4; if (gCurrentLevel == LEVEL_VENOM_ANDROSS) { D_80177C94 = D_80177CAC = D_80177CB4 = D_80177CBC = D_80177CC4 = D_80177C9C = 0; } } gHitCount = gSavedHitCount = D_80177CA4; } D_80161720 = 0.0f; D_80161724 = 0.0f; D_80161728 = 0.0f; D_8016172C = gHitCount; D_80161730 = 0; D_80161684 = D_80161A50; D_80177DC8 = D_80177CA0; D_80161A88 = D_80161A8C; player->unk_144 = D_80177CB0; D_80177D20 = player->unk_144; player->unk_138 = -player->unk_144; player->pos.z = -player->unk_144; if ((D_80177CA0 > 0) && (gLevelMode == LEVELMODE_ON_RAILS)) { if (gCurrentLevel == LEVEL_MACBETH) { sp2E = D_80177DC8; func_E6A810_801AD080(); D_80177DC8 = sp2E; } func_80062568(); } if (player->form == FORM_LANDMASTER) { player->pos.z -= 200.0f; player->unk_138 -= 200.0f; } player->camEye.y = (player->pos.y * player->unk_148) + 10.0f; player->camEye.x = player->pos.x * player->unk_148; D_801779E8.x = D_801779E8.y = D_801779E8.z = D_801779D8.x = D_801779D8.y = D_801779D8.z = 0.0f; if (gVersusMode) { gLaserStrength[gPlayerNum] = 0; player->pos.y = 500.0f; player->pos.x = D_800D3114[gPlayerNum]; player->pos.z = D_800D3124[gPlayerNum]; player->unk_114 = D_800D3154[gPlayerNum]; player->form = D_80177870[gPlayerNum]; switch (player->form) { case FORM_ARWING: break; case FORM_LANDMASTER: player->pos.y = 0.0f; player->unk_0D0 = 15.0f; player->unk_0D4 = 3.0f; break; case FORM_ON_FOOT: player->pos.y = 0.0f; player->unk_0D0 = 15.0f; player->unk_068 = 0; switch (gPlayerNum) { case 0: sp38 = SEGMENTED_TO_VIRTUAL(D_302E56C); break; case 1: sp38 = SEGMENTED_TO_VIRTUAL(D_302E830); break; case 2: sp38 = SEGMENTED_TO_VIRTUAL(D_302E74C); break; case 3: sp38 = SEGMENTED_TO_VIRTUAL(D_302E65C); break; } for (j = 0; j < 30; j++, sp38++) { player->jointTable[j] = *sp38; } break; } func_800B7184(player, 1); } player->state_1C8 = PLAYERSTATE_1C8_3; player->unk_204 = gLevelType; if ((gLevelMode == LEVELMODE_ALL_RANGE) && !gVersusMode) { player->pos.z = 8000.0f; player->pos.y = 670.0f; player->unk_0A0 = 730.0f; player->unk_204 = 2; if ((gCurrentLevel == LEVEL_VENOM_ANDROSS) && (D_8017827C == 1)) { player->pos.x = -7910.0f; player->pos.y = 300.0f; player->pos.z = -11808.0f; player->unk_114 = 188.0f; player->unk_240 = 1; } func_800B63BC(player, 1); } else { player->unk_014 = 1.0f; player->unk_018 = 1.0f; } if ((D_8017782C != 0) && (D_80177CA0 == 0)) { D_800D3180[gCurrentLevel] = 0; for (j = 0; j < 10; j++) { D_80177A10[j] = 0; D_80177A48[j] = 0.0f; } D_8017782C = 0; D_8015F924 = 0; switch (gCurrentLevel) { case LEVEL_CORNERIA: player->state_1C8 = PLAYERSTATE_1C8_2; player->unk_204 = 1; D_80161A88 = D_80161A8C = 2; func_800A3FB0(); break; case LEVEL_BOLSE: player->unk_204 = 1; D_E51970_801A03DC = 6; /* fallthrough */ case LEVEL_SECTOR_X: case LEVEL_AREA_6: case LEVEL_SECTOR_Y: case LEVEL_VENOM_1: case LEVEL_SOLAR: case LEVEL_ZONESS: case LEVEL_MACBETH: case LEVEL_TITANIA: case LEVEL_AQUAS: case LEVEL_FORTUNA: case LEVEL_KATINA: case LEVEL_SECTOR_Z: case LEVEL_VENOM_2: player->state_1C8 = PLAYERSTATE_1C8_2; break; case LEVEL_METEO: player->state_1C8 = PLAYERSTATE_1C8_2; break; } } else { if (!gVersusMode && !((gCurrentLevel == LEVEL_VENOM_2) && (D_8017827C == 2))) { D_80177838 = 80; } if (gCurrentLevel == LEVEL_BOLSE) { D_80177A98 = 1; } if ((gCurrentLevel == LEVEL_MACBETH) && (D_80177CA0 == 0)) { player->pos.z = -4115.0f; D_80177D20 = player->unk_144 = 3932.0f; D_80177DC8 = 40; D_80178310 = SEGMENTED_TO_VIRTUAL(D_800CFDA0[gCurrentLevel]); for (sp34 = D_80178310, i = 0; i < D_80177DC8; i++, sp34++) { Object_Load(sp34, 4000.0f, -4000.0f, 4000.0f, -4000.0f); } func_E6A810_801ACFBC(sp34); } } if (player->state_1C8 == PLAYERSTATE_1C8_2) { player->unk_234 = 1; switch (gCurrentLevel) { case LEVEL_CORNERIA: func_8001D444(0, 0x25, 0, 0xFF); break; case LEVEL_METEO: func_8001D444(0, 0x32, 0, 0xFF); break; case LEVEL_FORTUNA: case LEVEL_BOLSE: case LEVEL_VENOM_2: func_8001D444(0, 0x33, 0, 0xFF); break; case LEVEL_VENOM_1: func_8001D444(0, 0x8008, 0, 0xFF); break; case LEVEL_KATINA: func_8001D444(0, 0x33, 0, 0xFF); break; case LEVEL_TITANIA: func_8001D444(0, 0x2D, 0, 0xFF); break; case LEVEL_ZONESS: case LEVEL_SECTOR_X: case LEVEL_VENOM_ANDROSS: case LEVEL_TRAINING: case LEVEL_MACBETH: default: func_8001D444(0, 0x2C, 0, 0xFF); break; case LEVEL_AREA_6: case LEVEL_SECTOR_Y: case LEVEL_AQUAS: case LEVEL_SECTOR_Z: case LEVEL_SOLAR: break; } } else if (!gVersusMode && (D_80177C90 != 0xFFFF) && ((gLevelMode != LEVELMODE_ALL_RANGE) || (D_8015F924 == 0))) { func_8001D444(0, D_80177C90, 0, 0xFF); } D_80177840 = D_80177848 = D_80177850 = 0; if ((gCurrentLevel == LEVEL_TRAINING)) { D_80177824 = 1; } if (D_80177824 && !gVersusMode) { for (j = 1; j < 6; j++) { gTeamShields[j] = gSavedTeamShields[j] = D_80177C38[j] = D_801778F0[j] = 0xFF; } for (j = 0; j < 6; j++) { D_80177CD0[j] = D_80177CF0[j] = 1; } gLaserStrength[gPlayerNum] = 0; gGoldRingCount[0] = D_80161A94[0] = D_80161714 = 0; gLifeCount[gPlayerNum] = 2; gBombCount[gPlayerNum] = 3; D_80177B8C = 1; if (gCamCount == (gPlayerNum + 1)) { D_80161720 = 0.0f; D_80161724 = 0.0f; D_80161728 = 0.0f; D_8016172C = 0; gHitCount = 0; D_80177824 = 0; } } if ((gCurrentLevel == LEVEL_TRAINING)) { D_80177824 = 1; } player->unk_478 = gLevelType; player->unk_479 = player->form; func_80057814(player); if (!gVersusMode && (((gCurrentLevel != LEVEL_TITANIA) && (gCurrentLevel != LEVEL_SOLAR)) || gVersusMode || (player->state_1C8 != PLAYERSTATE_1C8_2))) { func_8001C8B8(gPlayerNum); } if ((player->form == FORM_ARWING) && !gVersusMode) { switch (player->unk_204) { case 0: Animation_GetFrameData(&D_3015AF4, 0, player->jointTable); break; case 1: Animation_GetFrameData(&D_3015C28, 0, player->jointTable); break; case 2: Animation_GetFrameData(&D_30163C4, 0, player->jointTable); break; } } if (gLaserStrength[gPlayerNum] > 0) { player->wings.unk_14 = -10.0f; } D_801779BC = 0; } void func_800B2130(Player* player) { s32 temp_t6; s32 temp_t7; s32 temp_t8; s32 temp_t9; s32 temp_v0; s32 temp_v0_2; s32 temp_v0_3; s32 temp_v0_4; s32 temp_v0_5; s32 temp_v0_6; s32 temp_v0_7; s32 var_v0; Math_SmoothStepToF(&player->unk_150, 1.0f, 0.05f, 10.0f, 0.0001f); player->unk_130 = Math_ModF(player->unk_130, 360.0f); if (player->unk_280 > 0) { player->unk_280 -= 30; if (player->unk_280 <= 0) { player->unk_280 = 0; } } if (player->timer_27C == 0) { if (player->unk_1DC == 0) { Math_SmoothStepToF(&player->unk_130, 0.0f, 0.1f, 10.0f, 0.00001f); } if (player->timer_1E0 != 0) { player->timer_1E0--; } if (player->timer_1E4 != 0) { player->timer_1E4--; } if (player->timer_214 != 0) { player->timer_214--; } if (player->timer_218 != 0) { player->timer_218--; } if (player->timer_1E8 != 0) { player->timer_1E8--; } if (player->unk_1DC != 0) { player->timer_1E4 = 0; player->timer_1E0 = 0; player->unk_150 = 1.5f; player->unk_130 += player->unk_1EC; if (player->timer_1E8 == 0) { if (player->unk_1EC > 0) { player->unk_1EC -= 5; } if (player->unk_1EC < 0) { player->unk_1EC += 5; } if (player->unk_1EC == 0) { player->unk_1DC = 0; } } else if (player->unk_280 < 180) { player->unk_280 += 100; if (player->unk_280 > 180) { player->unk_280 = 180; } } } } } void func_800B22C0(Player* player) { f32 temp_fv0; f32 temp_fv0_2; s32* temp_v1; s32 temp_t3; s32 temp_t4; s32 temp_v0; s32 temp_v0_2; s32 temp_v0_3; s32 temp_v0_4; s32 var_v0; player->unk_130 = Math_ModF(player->unk_130, 360.0f); if (player->unk_1DC == 0) { temp_fv0 = player->unk_130; if (player->unk_130 > 0.0f) { player->unk_130 -= (player->unk_130 * 0.1f); if (player->unk_130 < 0.1f) { player->unk_130 = 0.0f; } } if (player->unk_130 < 0.0f) { player->unk_130 -= player->unk_130 * 0.1f; if (player->unk_130 > -0.1f) { player->unk_130 = 0.0f; } } } temp_v0 = player->timer_1E0; if (player->timer_1E0 != 0) { player->timer_1E0--; } if (player->timer_1E4 != 0) { player->timer_1E4--; } if (player->timer_1E8 != 0) { player->timer_1E8--; } if (player->unk_1DC != 0) { player->timer_1E4 = 0; player->timer_1E0 = 0; player->unk_130 += player->unk_1EC; if (player->unk_12C > 0.0f) { player->unk_12C -= 8.0f; if (player->unk_12C < 0.0f) { player->unk_12C = 0.0f; } } if (player->unk_12C < 0.0f) { player->unk_12C += 8.0f; if (player->unk_12C > 0.0f) { player->unk_12C = 0.0f; } } if (player->timer_1E8 == 0) { if (player->unk_1EC > 0) { player->unk_1EC -= 2; } if (player->unk_1EC < 0) { player->unk_1EC += 2; } if (player->unk_1EC == 0) { player->unk_1DC = 0; } } else { Math_SmoothStepToF(&D_801779A8[player->num], 30.0f, 1.0f, 30.0f, 0.0f); } if ((player->timer_1E8 >= 5) && (player->timer_498 == 0)) { if (player->unk_1EC > 0) { player->unk_170 = 1.3f; } if (player->unk_1EC < 0) { player->unk_16C = 1.3f; } } if (gVersusMode) { D_80177B00[player->num][0] = D_80177B00[player->num][1] = D_80177B00[player->num][2] = D_80177B00[player->num][3] = 0; } } } void func_800B2574(Player* player) { f32 sp2C; f32 sp28; s32 var; if ((player->unk_2BC != 0.0f) && (gInputHold->button & gBrakeButton[player->num]) && (gInputHold->button & gBoostButton[player->num])) { player->unk_2B4 = 1; } if (gLevelMode == LEVELMODE_ON_RAILS) { sp28 = 3.0f; sp2C = 0.5f; } else { sp28 = 1.5f; sp2C = 0.35f; } player->unk_484 = 0; var = gInputPress->stick_y; // fake? if (D_Timer_80177A70[gPlayerNum] != 0) { D_Timer_80177A70[gPlayerNum]--; } if (D_Timer_80177A88[gPlayerNum] != 0) { D_Timer_80177A88[gPlayerNum]--; } if ((player->unk_4DC == 0) && (D_80177AB0 < 5)) { if (var >= -50) { D_Timer_80177A70[gPlayerNum] = 5; } if ((D_Timer_80177A70[gPlayerNum] > 0) && (D_Timer_80177A70[gPlayerNum] < 5) && (D_Timer_80177A88[gPlayerNum] != 0)) { player->unk_4DC = 1; if (gLevelMode == LEVELMODE_ON_RAILS) { player->unk_198 = player->unk_238; player->unk_238 = 0; } player->unk_014 = player->unk_018 = 0.0f; if (player->unk_4D8 > 340.0f) { player->unk_4D8 -= 360.0f; } return; } } if (player->timer_27C != 0) { player->timer_27C--; player->unk_2B4 = 1; if (D_80177E80 > 0) { Math_SmoothStepToF(&D_801779A8[player->num], D_80177E80 * 10.0f, 1.0f, 5.0f, 0.0f); } player->unk_110 += 0.3f; Math_SmoothStepToF(&player->unk_08C, -130.0f, 0.2f, 10.0f, 0.0f); player->unk_130 -= player->unk_258; player->unk_258 = player->unk_258 + 0.2f; if (player->unk_258 > 50.0f) { player->unk_258 = 50.0f; } if (!(gFrameCount & 1) && (gBlurAlpha > 64)) { if (1) {} gBlurAlpha--; } } else { player->unk_258 = 0.0f; if (gBlurAlpha < 255) { gBlurAlpha += 4; if (gBlurAlpha >= 252) { gBlurAlpha = 255; } } if (!(gInputHold->button & gBrakeButton[player->num]) && !(gInputHold->button & gBoostButton[player->num])) { player->unk_2B4 = 1; if (player->unk_2BC == 0.0f) { player->unk_2B4 = 0; } } if ((gInputHold->button & gBoostButton[player->num]) && !(gInputHold->button & gBrakeButton[player->num]) && (player->state_1C8 != PLAYERSTATE_1C8_5) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { func_800A5FA0(&player->unk_460, 0x09000002, player->num); player->unk_194 = 5.0f; player->unk_190 = 5.0f; if (gBoostButton[player->num] & gInputPress->button) { D_Timer_80177A88[gPlayerNum] = 5; } } if (gLevelType == LEVELTYPE_PLANET) { player->wings.unk_28 += (35.0f - player->wings.unk_28) * 0.1f; Math_SmoothStepToF(&player->wings.unk_04, 0.0f, 0.5f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, 0.0f, 0.5f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, 0.0f, 0.5f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, 0.0f, 0.5f, 100.0f, 0.0f); } player->unk_2BC += sp28; if (player->unk_2BC > 90.0f) { player->unk_2BC = 90.0f; player->unk_2B4 = 1; } player->unk_25C += 0.04f; if (player->unk_25C > 0.6f) { player->unk_25C = 0.6f; } player->unk_190 = 2.0f; player->unk_110 += 2.0f; if (player->unk_110 > 30.0f) { player->unk_110 = 30.0f; } Math_SmoothStepToF(&player->unk_08C, -400.0f, 0.1f, 30.0f, 0.0f); player->unk_484 = 1; Math_SmoothStepToF(&D_801779A8[player->num], 50.0f, 1.0f, 10.0f, 0.0f); } else { if (player->unk_2BC > 0.0f) { player->unk_2BC -= sp2C; if (player->unk_2BC <= 0.0f) { player->unk_2BC = 0.0f; player->unk_2B4 = 0; } } if (player->unk_110 > 0.0f) { player->unk_110 -= 1.0f; if (player->unk_110 < 0.0f) { player->unk_110 = 0.0f; } } } } } void func_800B2BE0(Player* player) { func_800B2574(player); } void func_800B2C00(Player* player) { f32 sp34; f32 sp30; s32 var; if (gLevelMode == LEVELMODE_ON_RAILS) { sp30 = 3.0f; sp34 = 0.5f; } else { sp30 = 1.5f; sp34 = 0.35f; } player->unk_485 = 0; var = gInputPress->stick_y; // fake? if (D_Timer_80177A00[gPlayerNum] != 0) { D_Timer_80177A00[gPlayerNum]--; } if (D_Timer_80177A38[gPlayerNum] != 0) { D_Timer_80177A38[gPlayerNum]--; } if (var >= -50) { D_Timer_80177A00[gPlayerNum] = 5; } if ((D_Timer_80177A00[gPlayerNum] > 0) && (D_Timer_80177A00[gPlayerNum] < 5) && (D_80177AB0 < 5) && (D_Timer_80177A38[gPlayerNum] != 0)) { D_Timer_80177A00[gPlayerNum] = 0; D_Timer_80177A38[gPlayerNum] = 0; player->state_1C8 = PLAYERSTATE_1C8_5; player->unk_1D0 = 0; player->unk_19C = 1; player->unk_000 = 0.0f; player->unk_004 = 0.0f; player->unk_194 = 5.0f; player->unk_190 = 5.0f; if (gCurrentLevel == LEVEL_CORNERIA) { D_80177B6C++; } } if ((gInputHold->button & gBrakeButton[player->num]) && !(gInputHold->button & gBoostButton[player->num]) && (player->state_1C8 != PLAYERSTATE_1C8_5) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { func_800A5FA0(&player->unk_460, 0x09000003, player->num); if ((gLevelMode == LEVELMODE_ALL_RANGE) && (gInputPress->button & gBrakeButton[player->num])) { D_Timer_80177A38[gPlayerNum] = 5; } } if (gLevelType == LEVELTYPE_PLANET) { Math_SmoothStepToF(&player->wings.unk_04, 90.0f, 0.2f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_08, -90.0f, 0.2f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_0C, 90.0f, 0.2f, 100.0f, 0.0f); Math_SmoothStepToF(&player->wings.unk_10, -90.0f, 0.2f, 100.0f, 0.0f); } player->unk_2BC += sp30; if (player->unk_2BC > 90.0f) { player->unk_2B4 = 1; player->unk_2BC = 90.0f; } player->unk_190 = 0.3f; player->unk_110 -= 1.0f; if (player->unk_110 < -20.0f) { player->unk_110 = -20.0f; } Math_SmoothStepToF(&player->unk_08C, 180.0f, 0.1f, 10.0f, 0.0f); player->unk_485 = 1; Math_SmoothStepToF(&D_801779A8[player->num], 25.0f, 1.0f, 5.0f, 0.0f); } else if (player->unk_2BC > 0.0f) { player->unk_2BC -= sp34; if (player->unk_2BC <= 0.0f) { player->unk_2BC = 0.0f; player->unk_2B4 = 0; } if (player->unk_110 < 0.0f) { player->unk_110 += 0.5f; if (player->unk_110 > 0.0f) { player->unk_110 = 0.0f; } } } Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 5.0f, 0.0f); } void func_800B3010(Player* player) { f32 sp2C; if (player->unk_2B8 == 0) { Math_SmoothStepToF(&player->unk_2BC, 0.0f, 1.0f, 1.0f, 0.0f); } player->unk_2B8 = 0; if (player->unk_2BC == 0.0f) { player->unk_2B4 = 0; } else if (!(gInputHold->button & Z_TRIG) && !(gInputHold->button & R_TRIG) && !(gInputHold->button & gBoostButton[player->num]) && !(gInputHold->button & gBrakeButton[player->num])) { player->unk_2B4 = 1; } sp2C = 20.0f; if ((gInputHold->button & gBoostButton[player->num]) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { player->unk_194 = 4.0f; player->unk_190 = 4.0f; func_800A5FA0(&player->unk_460, 0x09000002, player->num); } Math_SmoothStepToF(&D_801779A8[player->num], 30.0f, 1.0f, 10.0f, 0.0f); player->unk_190 = 2.0f; sp2C = 35.0f; player->unk_2B8 = 1; Math_SmoothStepToF(&player->unk_2BC, 90.0f, 1.0f, 1.0f, 0.0f); if (player->unk_2BC >= 90.0f) { player->unk_2B4 = 1; } } if ((gInputHold->button & gBrakeButton[player->num]) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { func_800A5FA0(&player->unk_460, 0x09000003, player->num); } Math_SmoothStepToF(&D_801779A8[player->num], 20.0f, 1.0f, 10.0f, 0.0f); sp2C = 5.0f; player->unk_2B8 = 1; Math_SmoothStepToF(&player->unk_2BC, 90.0f, 1.0f, 1.0f, 0.0f); if (player->unk_2BC >= 90.0f) { player->unk_2B4 = 1; } } Math_SmoothStepToF(&player->unk_0D0, sp2C, 0.1f, 2.0f, 0.001f); } void func_800B3314(Player* player) { f32 temp; f32 temp2; player->unk_0D4 = 3.0f; if ((gInputHold->button & Z_TRIG) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { func_800A5FA0(&player->unk_460, 0x09000002, player->num); } player->unk_188 = 0.0f; player->unk_12C += 4.0f; if (player->unk_12C > 50.0f) { player->unk_12C = 50.0f; } Math_SmoothStepToF(&player->unk_170, 1.0f, 1.0f, 0.4f, 0.0f); player->unk_2B8 = 1; Math_SmoothStepToF(&player->unk_2BC, 90.0f, 1.0f, 0.7f, 0.0f); if (player->unk_2BC >= 90.0f) { player->unk_2B4 = 1; } } else { if (player->unk_12C > 0.0f) { player->unk_188 += 1.5f; player->unk_12C -= player->unk_188; if (player->unk_12C <= 0.0f) { player->unk_12C = 0.0f; if (player->unk_188 > 3.0f) { player->unk_188 *= -0.4f; player->unk_12C -= player->unk_188; } } } } if ((gInputHold->button & R_TRIG) && (player->unk_2B4 == 0)) { if (player->unk_2BC == 0.0f) { func_800A5FA0(&player->unk_460, 0x09000002, player->num); } player->unk_188 = 0.0f; player->unk_12C -= 4.0f; if (player->unk_12C < -50.0f) { player->unk_12C = -50.0f; } Math_SmoothStepToF(&player->unk_16C, 1.0f, 1.0f, 0.4f, 0.0f); player->unk_2B8 = 1; Math_SmoothStepToF(&player->unk_2BC, 90.0f, 1.0f, 0.7f, 0.0f); if (player->unk_2BC >= 90.0f) { player->unk_2B4 = 1; } } else if (player->unk_12C < 0.0f) { player->unk_188 += 1.5f; player->unk_12C += player->unk_188; if (player->unk_12C >= 0.0f) { player->unk_12C = 0.0f; if (player->unk_188 > 3.0f) { player->unk_188 *= -0.4f; player->unk_12C += player->unk_188; } } } if ((player->unk_16C > 0.2f) && (player->unk_170 > 0.2f) && (player->timer_220 == 0)) { player->unk_12C += (((__cosf((f32) gFrameCount * M_DTOR * 8.0f) * 10.0f) - player->unk_12C) * 0.1f); Math_SmoothStepToAngle(&player->unk_0E4, 0.0f, 0.05f, 5.0f, 0.00001f); Math_SmoothStepToAngle(&player->unk_0EC, 0.0f, 0.05f, 5.0f, 0.00001f); temp = gInputPress->stick_y; Math_SmoothStepToF(&player->unk_000, temp * 0.5f, 0.05f, 5.0f, 0.00001f); Math_SmoothStepToF(&player->unk_110, 30.0f, 0.5f, 5.0f, 0.0f); player->unk_0D4 = -0.4f; Math_SmoothStepToF(&D_801779A8[player->num], 30.0f, 1.0f, 10.0f, 0.0f); if ((gCamCount == 1) && !(gFrameCount & 1)) { func_8007BC7C(((Rand_ZeroOne() - 0.5f) * 20.0f) + player->pos.x, player->unk_068 + 10.0f, player->unk_138 - 10.0f, (2.0f * Rand_ZeroOne()) + 4.0f); } } else if ((gCamCount == 1) && !(gFrameCount & 3) && (player->unk_1DC == 0)) { if ((player->unk_16C > 0.2f) && (player->timer_220 == 0)) { func_8007BC7C(((Rand_ZeroOne() - 0.5f) * 10.0f) + (player->pos.x - 57.0f), player->unk_068 + 10.0f, player->unk_138 - 10.0f, (2.0f * Rand_ZeroOne()) + 3.0f); } if ((player->unk_170 > 0.2f) && (player->timer_220 == 0)) { func_8007BC7C(((Rand_ZeroOne() - 0.5f) * 10.0f) + (player->pos.x + 57.0f), player->unk_068 + 10.0f, player->unk_138 - 10.0f, (2.0f * Rand_ZeroOne()) + 3.0f); } } } void func_800B39E0(Player* player) { s32 i; player->unk_084 = 0.0f; player->unk_090.x = player->pos.x; player->unk_090.y = player->pos.y; player->unk_090.z = player->pos.z; if (player->timer_1F8 != 0) { player->timer_1F8--; } if (player->timer_1FC != 0) { player->timer_1FC--; } if (player->timer_220 != 0) { player->timer_220--; } if (player->timer_498 != 0) { player->timer_498--; } if (player->timer_224 != 0) { player->timer_224--; } if (gVersusMode) { for (i = 0; i < gCamCount; i++) { if ((D_80177B00[player->num][i] != 0) && !(gControllerHold[i].button & A_BUTTON)) { D_80177B00[player->num][i]--; } } } if (D_80177D40[player->num] != 0) { D_80177D40[player->num]--; if (D_80177D40[player->num] == 1000) { D_80177D40[player->num] = 0; } } if (D_80177D58[player->num] != 0) { D_80177D58[player->num]--; if (D_80177D58[player->num] == 1000) { D_80177D58[player->num] = 0; } } if (D_80177D88[player->num] != 0) { D_80177D88[player->num]--; } if (D_80177D70[player->num] != 0) { D_80177D70[player->num]--; } if (D_80177AE8[player->num] != 0) { D_80177AE8[player->num]--; Math_SmoothStepToF(&D_80177AB8[player->num], 128.0f, 1.0f, 40.0f, 0.01f); } else { Math_SmoothStepToF(&D_80177AB8[player->num], 0.0f, 1.0f, 10.0f, 0.01f); } Math_SmoothStepToF(&D_80177AA0[player->num], 0.0f, 1.0f, 0.4f, 0.01f); if ((player->form == FORM_LANDMASTER) && (player->unk_1A0 != 0)) { player->unk_1A0--; } player->unk_200 = player->timer_224 & 1; if (player->timer_224 != 0) { D_8017835C = 8; } if (player->timer_224 == 19) { D_80178340 = 128; D_80178348 = 255; D_80178350 = D_80178354 = 0; } if (player->timer_278 != 0) { if (!(player->timer_278 & 7)) { if (player->timer_278 & 8) { D_80177DB8[gPlayerNum]++; } else { D_80177DB8[gPlayerNum]--; } } player->timer_278--; } if (player->unk_1F4 > 0) { if (player->unk_1F4 > 3) { *D_80177984 = 1; } player->unk_1F4--; if (player->form == FORM_ARWING) { player->unk_134 = (__sinf(player->unk_1F4 * 400.0f * M_DTOR) * player->unk_1F4) * D_800D3164[player->unk_21C]; if (player->state_1C8 == PLAYERSTATE_1C8_3) { player->unk_084 = (__sinf(player->unk_1F4 * 400.0f * M_DTOR) * player->unk_1F4) * D_800D3164[player->unk_21C] * 0.8f; } } else { player->unk_134 = (__sinf(player->unk_1F4 * 400.0f * M_DTOR) * player->unk_1F4) * D_800D3164[player->unk_21C] * 1.5f; player->unk_084 = 0.0f; } if ((gLevelMode != LEVELMODE_UNK_2) && ((player->unk_0D8.x != 0.f) || (player->unk_0D8.y != 0.f) || (player->unk_0D8.z != 0.f)) && ((player->unk_1A4 >= 40) || (player->unk_1A4 == 21))) { player->unk_2B4 = 1; player->unk_0E4 = 0; player->unk_0E8 = 0; Math_SmoothStepToF(&player->unk_110, 0, 1.0f, 5.0f, 0); } if (player->unk_1F4 == 0) { player->unk_134 = 0; } } player->pos.x += player->unk_0D8.x; player->pos.y += player->unk_0D8.y; if (gLevelMode == LEVELMODE_ALL_RANGE) { player->pos.z += player->unk_0D8.z; Math_SmoothStepToF(&player->unk_0D8.z, 0, 0.1f, 1.0f, 0.5f); } Math_SmoothStepToF(&player->unk_0D8.x, 0, 0.1f, 1.0f, 0.5f); Math_SmoothStepToF(&player->unk_0D8.y, 0, 0.1f, 1.0f, 0.5f); player->unk_25C -= 0.02f; if (player->unk_25C < 0.0f) { player->unk_25C = 0.0f; } } void func_800B40AC(Player* player) { if (player->damage > 0) { player->damage -= 2; if (player->damage <= 0) { player->damage = 0; } player->shields -= 2; if (player->shields <= 0) { player->shields = 0; player->damage = 0; } } if (player->heal > 0) { player->damage = 0; player->heal -= 2; if (player->heal <= 0) { player->heal = 0; } player->shields += 2; if (player->shields >= Play_GetMaxShields()) { player->shields = Play_GetMaxShields(); player->heal = 0; func_8001A838(0x41007012); } } } void func_800B415C(Player* player) { s32 var_v0; func_800B40AC(player); if (player->shields < 0x80) { if (player->shields > 0x50) { var_v0 = 0x3F; } else if (player->shields > 0x28) { var_v0 = 0x1F; } else { var_v0 = 0xF; } if (!(gFrameCount & var_v0)) { func_80060F30(&player->unk_460, 0x49001026, player->num); } } } void func_800B41E0(Player* player) { } void func_800B41EC(Player* player) { player->state_1C8 = PLAYERSTATE_1C8_4; if (!gVersusMode) { func_800182F4(0x100100FF); func_800182F4(0x110100FF); func_8001D444(0, 0x27, 0, 0xFF); } if (gCurrentLevel == LEVEL_SOLAR) { func_8001A838(0x4100C023); } func_8001CA24(player->num); func_800A5FA0(&player->unk_460, 0x0900C010, player->num); player->shields = 0; player->unk_1D0 = 0; player->unk_1F4 = 0; player->timer_220 = 0; player->unk_134 = 0.0f; D_80161A2C = 0; } void func_800B42B0(Player* player) { switch (player->form) { case FORM_ARWING: if (player->timer_1F8 != 0) { gInputPress->stick_x = 0; gInputPress->stick_y = 0; gInputPress->button = 0; gInputHold->button = gBoostButton[player->num]; player->unk_2BC = 1.0f; } func_800ADA28(player); func_800B2574(player); func_800B2C00(player); func_800B41E0(player); func_800B2130(player); if (player->unk_4DC != 0) { func_800AECAC(player); } else { func_800AF07C(player); } func_800ADF58(player); func_800AD7F0(player); func_800A8BA4(player); func_800A46A0(player); func_800A4C40(player); func_800AA800(player); func_800B415C(player); if ((player->shields <= 0) && (player->timer_220 != 0)) { func_800B41EC(player); player->vel.x *= 0.2f; player->vel.y = 5.0f; player->unk_0E4 = player->unk_0E8 = 0.0f; player->unk_238 = 0; player->timer_1F8 = 20; if (gLevelType == LEVELTYPE_SPACE) { player->timer_1F8 = 40; } player->timer_1FC = 120; } break; case FORM_LANDMASTER: func_80047504(player); break; case FORM_BLUE_MARINE: func_E16C50_801ACE50(player); func_E16C50_801AD328(player); func_800B41E0(player); func_E16C50_801AACF8(player); func_800ADF58(player); func_E16C50_801AC274(player); func_800A8BA4(player); func_800AA800(player); func_800B415C(player); if ((player->shields <= 0) && (player->timer_220 != 0)) { func_800B41EC(player); } break; } } void func_800B44C4(Player* player) { switch (player->form) { case FORM_ARWING: func_800ADA28(player); func_800B2574(player); func_800B2C00(player); func_800B41E0(player); func_800B2130(player); if (player->unk_4DC != 0) { func_800AECAC(player); } else { func_800AE4A4(player); } func_800AD7F0(player); func_800A8BA4(player); func_800A4C40(player); func_800AA800(player); func_800B415C(player); if ((player->shields <= 0) && (player->timer_220 != 0)) { func_800B41EC(player); player->vel.y = 5.0f; if (gLevelType == LEVELTYPE_SPACE) { player->vel.y = 0.0f; } player->timer_1F8 = 20; player->timer_1FC = 120; player->unk_000 = 0.0f; player->unk_004 = 1.0f; if (player->unk_0E8 < 0.0f) { player->unk_004 = -1.0f; } player->unk_0E4 = 0.0f; player->unk_4D8 = 0.0f; } break; case FORM_LANDMASTER: func_800ADD98(player); func_800B3314(player); func_800B3010(player); func_800B41E0(player); func_800B22C0(player); func_800AF928(player); func_800AD7F0(player); func_800A8BA4(player); func_800AA800(player); func_800B415C(player); if ((player->shields <= 0) && (player->timer_220 != 0)) { func_800B41EC(player); } break; case FORM_BLUE_MARINE: func_E16C50_801BEC80(player); return; case FORM_ON_FOOT: func_800B00C0(player); func_800B0194(player); func_800AD7F0(player); func_800A8BA4(player); func_800AA800(player); func_800B415C(player); if ((player->shields <= 0) && (player->timer_220 != 0)) { func_800B41EC(player); } break; } } void func_800B46F8(Player* player) { s32 temp_ft2; if ((player->state_1C8 == PLAYERSTATE_1C8_3) && (D_8017796C >= 0)) { D_8017796C++; if (D_8017796C > 960) { D_8017796C = 0; if (1) {} if ((player->shields < 0x40) && ((gTeamShields[1] > 0) || (gTeamShields[3] > 0) || (gTeamShields[2] > 0))) { do { do { temp_ft2 = (s32) (Rand_ZeroOne() * 2.9f) + 1; } while (gTeamShields[temp_ft2] <= 0); } while (0); // macro? switch (temp_ft2) { case 1: if (Rand_ZeroOne() < 0.5f) { func_800BA808(gMsg_ID_20306, RCID_FALCO); } else { func_800BA808(gMsg_ID_20309, RCID_FALCO); } break; case 2: if (Rand_ZeroOne() < 0.5f) { func_800BA808(gMsg_ID_20305, RCID_SLIPPY); } else { func_800BA808(gMsg_ID_20308, RCID_SLIPPY); } break; case 3: if (Rand_ZeroOne() < 0.5f) { func_800BA808(gMsg_ID_20304, RCID_PEPPY); } else { func_800BA808(gMsg_ID_20307, RCID_PEPPY); } break; } } } } } // lots of fakery void func_800B48BC(Player* player) { f32 sp1CC; f32 sp1C8; s32 sp1C4; s32 i; Vec3f sp58[30]; s32 pad; if (gVersusMode) { gInputHold = &gControllerHold[player->num]; gInputPress = &gControllerPress[player->num]; D_80177984 = &D_80137E84[player->num]; } else { gInputHold = &gControllerHold[gMainController]; gInputPress = &gControllerPress[gMainController]; D_80177984 = &D_80137E84[gMainController]; } D_80177990[player->num] += (s32) D_801779A8[player->num]; Math_SmoothStepToF(&D_801779A8[player->num], 0.0f, 1.0f, 1.5f, 0.0f); if (D_80177990[player->num] >= 100) { D_80177990[player->num] -= 100; *D_80177984 = 1; } if (D_Timer_80177BD0[player->num] != 0) { D_Timer_80177BD0[player->num]--; if (!(gFrameCount & 1)) { *D_80177984 = 1; } } if (player->state_1C8 >= 2) { func_800B39E0(player); } player->unk_228 = 0; if ((player->state_1C8 >= 2) && (player->form == FORM_ARWING) && !gVersusMode) { switch (player->unk_204) { case 0: sp1C4 = Animation_GetFrameData(&D_3015AF4, 0, sp58); break; case 1: sp1C4 = Animation_GetFrameData(&D_3015C28, 0, sp58); break; case 2: sp1C4 = Animation_GetFrameData(&D_30163C4, 0, sp58); break; } Math_SmoothStepToVec3fArray(sp58, player->jointTable, 1, sp1C4, 0.1f, 1.3f, 0.0f); } player->unk_48C = player->unk_494 = 0; sp1C4 = player->unk_22C; if (sp1C4 != 0) { player->unk_22C--; } switch (player->state_1C8) { case PLAYERSTATE_1C8_0: player->unk_234 = 0; D_80161A2C = 0; D_801779BC = 0; break; case PLAYERSTATE_1C8_1: func_800B0F50(player); D_80178358 = 0; D_801779BC = 0; break; case PLAYERSTATE_1C8_2: D_80161A2C = 0; D_801779BC = 0; player->wings.unk_2C = 1; func_8004A52C(player); break; case PLAYERSTATE_1C8_3: D_80161A2C = 1; func_800B46F8(player); player->wings.unk_2C = 0; D_80161704 = 0xFF; if ((!gVersusMode || (D_80177E7C != 0)) && (player->unk_4DC == 0) && (gInputPress->button & U_CBUTTONS) && ((player->form == FORM_ARWING) || (gVersusMode && (player->form == FORM_LANDMASTER)))) { if (player->unk_238 = 1 - player->unk_238) { Audio_PlaySfx(0x4900002C, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else { Audio_PlaySfx(0x4900002D, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); if (gLevelMode == LEVELMODE_ON_RAILS) { player->unk_034 = 0.0f; } } player->unk_014 = 0.1f; } switch (gLevelMode) { case LEVELMODE_ON_RAILS: D_80178488 = true; func_800B42B0(player); player->unk_234 = 1; break; case LEVELMODE_ALL_RANGE: if (!gVersusMode) { func_800B44C4(player); player->unk_234 = 1; } else if (D_80177E7C != 0) { if (gPlayerInactive[player->num] == true) { do { sp1C4 = (s32) (Rand_ZeroOne() * 3.9f); } while (gPlayerInactive[sp1C4]); player->unk_288 = sp1C4 + 1; player->state_1C8 = PLAYERSTATE_1C8_13; player->unk_1D0 = 0; func_800B5FBC(player, player->unk_288 - 1, 1); } else { if (D_80177E7C == 1) { D_80177E7C += 1; for (i = 0; i < 4; i++) { func_800A5FA0(gPlayer[i].unk_460_arr, 0x09000002, gPlayer[i].num); gPlayer[i].unk_190 = gPlayer[i].unk_194 = 5.0f; } } func_800B44C4(player); player->unk_234 = 1; } } else { gInputPress->stick_x = gInputPress->stick_y = 0; D_80177844 = 0; D_801779BC = 0; } break; case LEVELMODE_UNK_2: D_80178488 = true; func_E9F1D0_801A5AD4(player); func_800A8BA4(player); break; } break; case PLAYERSTATE_1C8_4: func_8004E3D8(player); break; case PLAYERSTATE_1C8_5: if (gVersusMode) { D_80177B00[player->num][0] = D_80177B00[player->num][1] = D_80177B00[player->num][2] = D_80177B00[player->num][3] = 0; } player->wings.unk_2C = 1; Math_SmoothStepToF(&player->wings.unk_04, 0.0f, 0.1f, 5.0f, 0); Math_SmoothStepToF(&player->wings.unk_08, 0.0f, 0.1f, 5.0f, 0); Math_SmoothStepToF(&player->wings.unk_0C, 0.0f, 0.1f, 5.0f, 0); Math_SmoothStepToF(&player->wings.unk_10, 0.0f, 0.1f, 5.0f, 0); func_800B40AC(player); func_8004CCC0(player); if (gCurrentLevel == LEVEL_KATINA) { func_800A8BA4(player); } else { func_800A887C(player); func_800A86E4(player); } break; case PLAYERSTATE_1C8_7: player->unk_238 = 0; D_801779BC = 0; func_800B40AC(player); func_8004C930(player); func_800A4C40(player); D_80161A2C = gChargeTimers[player->num] = 0; break; case PLAYERSTATE_1C8_8: D_801779BC = 0; func_800B40AC(player); func_80049C0C(player); D_80161A2C = 0; break; case PLAYERSTATE_1C8_9: D_801779BC = 0; func_800B40AC(player); func_8004AAF4(player); func_800B2130(player); gChargeTimers[player->num] = player->unk_238 = D_80161A2C = 0; break; case PLAYERSTATE_1C8_10: D_801779BC = 0; func_8002E700(player); D_80161A2C = 0; break; case PLAYERSTATE_1C8_11: func_E9F1D0_8018C390(player); func_800B40AC(player); break; case PLAYERSTATE_1C8_12: break; case PLAYERSTATE_1C8_13: player->unk_234 = 0; if (gPlayerInactive[player->num] == true) { func_800B5FBC(player, player->unk_288 - 1, 0); } else if ((D_80177E74 == 0) && (player->unk_1D0 != 0)) { player->unk_1D0 = 0; func_800AB304(player); func_800B0F50(player); func_800B44C4(player); func_800B7184(player, 1); func_800A5FA0(&player->unk_460, 0x09000002, player->num); player->unk_190 = player->unk_194 = 5.0f; } else if (player->unk_288 >= 0) { if (player->unk_288 == 0) { player->unk_288 = 1; } func_800B5FBC(player, player->unk_288 - 1, 0); } break; case PLAYERSTATE_1C8_6: D_80161A2C = 0; if (!gVersusMode) { D_801779BC = 0; } player->unk_234 = 0; player->vel.z = player->vel.x = player->vel.y = player->unk_0D8.x = player->unk_0D8.y = 0.0f; if ((gLevelMode == LEVELMODE_ALL_RANGE) && (D_8017837C == 7)) { player->camEye.x += 1.0f; player->camEye.z += 1.5f; } if ((gCurrentLevel == LEVEL_ZONESS) || (gCurrentLevel == LEVEL_SOLAR)) { Math_SmoothStepToF(&player->camEye.y, 500.0f, 0.05f, 10.0f, 0.0f); Math_SmoothStepToF(&player->camEye.z, player->unk_138 + D_80177D20 + 500.0f, 0.05f, 20.0f, 0.0f); } if (player->timer_1F8 == 0) { if (gCamCount == 4) { player->state_1C8 = PLAYERSTATE_1C8_13; player->timer_1F8 = 200; } else { D_80178348 = D_80178350 = D_80178354 = 0; D_80178358 = 0xFF; } if (D_80178340 == 0xFF) { func_800A6148(); D_80177D20 = gPlayer->unk_144 = 0.0f; D_80178380[0] = 0; D_8015F93C = gRadioState = 0; func_8001AE58(); func_8001D400(0); D_80161A94[0] = gGoldRingCount[0]; if (gCurrentLevel == LEVEL_VENOM_ANDROSS) { if (1) {} if (1) {} if (1) {} if (1) {} if (1) {} D_80177C94 = gGoldRingCount[0]; } if (D_8017837C != 4) { if (D_8017837C != 7) { gDrawMode = DRAWMODE_0; } else if (gCurrentLevel == LEVEL_TRAINING) { gGameState = GSTATE_MENU; D_Timer_8017783C = 2; D_8017784C = 0; gDrawMode = DRAWMODE_0; D_80161A34 = 7; D_80178410 = 0; } else { if ((gCurrentLevel == LEVEL_SECTOR_X) || (gCurrentLevel == LEVEL_METEO)) { D_8017827C = 0; } if (gLifeCount[gPlayerNum] < 0) { gNextGameState = GSTATE_GAME_OVER; D_80161A94[0] = 0; } else { D_80177854 = 1; } gBombCount[gPlayerNum] = 3; gLaserStrength[gPlayerNum] = 0; D_80178488 = true; gDrawMode = DRAWMODE_0; } } else { gNextGameState = GSTATE_MAP; D_80161A34 = 7; gDrawMode = DRAWMODE_0; } if (1) {} } } break; default: break; } if ((D_80177C70 == 0) && (player->form == FORM_ARWING)) { sp1CC = 0.77699995f; sp1C8 = 1100.0f; } else if (D_80177C70 == 2) { sp1CC = 0.77699995f; sp1C8 = 1100.0f; } else { sp1CC = 0.74f; sp1C8 = 700.0f; } Math_SmoothStepToF(&player->unk_148, sp1CC, 1.0f, 0.05f, 0.0f); Math_SmoothStepToF(&player->unk_14C, sp1CC, 1.0f, 0.05f, 0.0f); Math_SmoothStepToF(&player->unk_09C, sp1C8, 1.0f, 10.0f, 0.0f); if (player->form == FORM_ARWING) { Math_SmoothStepToF(&player->unk_194, player->unk_190, 0.5f, 5.0f, 0.0f); if ((player->unk_2B4 != 0) && (gPlayer->state_1C8 == PLAYERSTATE_1C8_3)) { player->unk_190 = 0.5f; } else { player->unk_190 = 1.0f; } } else if (player->form == FORM_LANDMASTER) { Math_SmoothStepToF(&player->unk_194, player->unk_190, 0.5f, 0.5f, 0.0f); player->unk_190 = 0.0f; } } void func_800B56BC(Player* player) { f32 var_fv1; f32 var_fv0; f32 temp; D_80177978 = (player->pos.x - player->unk_0AC) * player->unk_148; if (((player->form == FORM_ARWING) && (player->state_1C8 == PLAYERSTATE_1C8_3)) || (player->state_1C8 == PLAYERSTATE_1C8_5)) { D_80177980 = (player->pos.y - player->unk_0B0) * player->unk_148; } var_fv1 = gInputPress->stick_x; var_fv0 = -gInputPress->stick_y; if ((player->state_1C8 != PLAYERSTATE_1C8_3) || (player->unk_4DC != 0)) { var_fv0 = 0.0f; var_fv1 = 0; } Math_SmoothStepToF(&player->unk_030, var_fv1 * 1.6f, 0.1f, 3.0f, 0.05f); if (gLevelType == 1) { Math_SmoothStepToF(&player->unk_02C, var_fv0 * 0.8f, 0.1f, 3.0f, 0.05f); } else if (player->pos.y < (D_80177940 + 50.0f)) { Math_SmoothStepToF(&player->unk_02C, var_fv0 * 0.3f, 0.1f, 3.0f, 0.05f); } else { Math_SmoothStepToF(&player->unk_02C, 2.0f * var_fv0, 0.1f, 4.0f, 0.05f); } D_80177978 -= player->unk_030 * 1.5f; D_80177980 -= player->unk_02C - 50.0f; D_801779A0 = (player->pos.x - player->unk_0AC) * player->unk_14C; D_801779A0 += player->unk_084 * -2.0f; D_801779A0 -= player->unk_030 * 0.5f; D_801779B8 = ((player->pos.y - player->unk_0B0) * player->unk_14C) + 20.0f; D_801779B8 += player->unk_060 * 5.0f; D_801779B8 -= player->unk_02C * 0.25f; switch (D_800D2F54) { case 0: Math_SmoothStepToF(&D_800D2F58, 0.0f, 0.4f, 10.0f, 0); break; case 1: Math_SmoothStepToF(&D_800D2F58, 200.0f, 0.4f, 10.0f, 0); break; } D_80177978 += player->unk_0AC; D_801779A0 += player->unk_0AC; D_80177980 += player->unk_0B0 + D_800D2F58; D_801779C0 = (player->unk_138 + D_80177D20) - 1.0f; D_80177988 = 400.0f + D_800D2F58; if (D_80177C70 == 2) { D_80177988 -= 50.0f; } if (player->unk_4DC != 0) { D_80177988 += 200.0f; D_801779B8 = (player->pos.y - player->unk_0B0) * 0.9f; Math_SmoothStepToF(&player->camEye.z, D_80177988, 0.1f, 8.0f, 0.0f); Math_SmoothStepToF(&player->unk_018, 0.2f, 1.0f, 0.05f, 0.0f); } else { Math_SmoothStepToF(&player->camEye.z, D_80177988, 0.2f, 20.0f, 0.0f); Math_SmoothStepToF(&player->unk_018, 1.0f, 1.0f, 0.05f, 0.0f); } D_801779B8 += player->unk_0B0 + (D_800D2F58 * 0.5f); Math_SmoothStepToF(&player->camEye.x, D_80177978, player->unk_014, 1000.0f, 0.0f); Math_SmoothStepToF(&player->camEye.y, D_80177980, player->unk_018, 1000.0f, 0.0f); Math_SmoothStepToF(&player->camAt.x, D_801779A0, player->unk_014, 1000.0f, 0.0f); Math_SmoothStepToF(&player->camAt.y, D_801779B8, player->unk_018, 1000.0f, 0.0f); Math_SmoothStepToF(&player->camAt.z, D_801779C0, player->unk_014, 1000.0f, 0.0f); Math_SmoothStepToF(&player->unk_014, 1.0f, 1.0f, 0.05f, 0.0f); temp = -player->unk_0EC; if (gLevelType == LEVELTYPE_PLANET) { Math_SmoothStepToF(&player->unk_034, temp * 0.3f, 0.1f, 1.5f, 0.0f); } else if (gLevelType == LEVELTYPE_SPACE) { Math_SmoothStepToF(&player->unk_034, temp * 0.2f, 0.1f, 1.5f, 0.0f); } } void func_800B5D30(Player* player, s32 arg1) { Vec3f sp4C; Vec3f sp40; s32 pad; s32 pad2; s32 pad3; Matrix_RotateY(gCalcMatrix, (player->unk_0E8 + player->unk_134) * M_DTOR * 0.75f, 0); Matrix_RotateX(gCalcMatrix, (player->unk_0E4 + player->unk_134) * M_DTOR * 0.75f, 1); sp4C.x = 0; sp4C.y = 0; sp4C.z = -1000.0f; Matrix_MultVec3f(gCalcMatrix, &sp4C, &sp40); D_80177978 = player->pos.x; D_80177980 = player->pos.y + player->unk_080; D_80177988 = player->unk_138 + D_80177D20; D_801779A0 = player->pos.x + sp40.x; D_801779B8 = player->pos.y + player->unk_080 + sp40.y; D_801779C0 = player->unk_138 + D_80177D20 + sp40.z; Math_SmoothStepToF(&player->camEye.x, D_80177978, player->unk_014, 100.0f, 0.0f); Math_SmoothStepToF(&player->camEye.y, D_80177980, player->unk_014, 100.0f, 0.0f); Math_SmoothStepToF(&player->camEye.z, D_80177988, player->unk_014, 50.0f, 0.0f); Math_SmoothStepToF(&player->camAt.x, D_801779A0, player->unk_014, 100.0f, 0.0f); Math_SmoothStepToF(&player->camAt.y, D_801779B8, player->unk_014, 100.0f, 0.0f); Math_SmoothStepToF(&player->camAt.z, D_801779C0, player->unk_014, 100.0f, 0.0f); Math_SmoothStepToF(&player->unk_014, 1.0f, 1.0f, 0.05f, 0); player->unk_034 = -(player->unk_0F8 + player->unk_0F0); if (arg1 != 0) { player->camEye.x = D_80177978; player->camEye.y = D_80177980; player->camEye.z = D_80177988; player->camAt.x = D_801779A0; player->camAt.y = D_801779B8; player->camAt.z = D_801779C0; } } void func_800B5FBC(Player* player, s32 playerNum, bool arg2) { u8 i; u8 var_v0; Vec3f sp58; Vec3f sp4C; var_v0 = 0x7F; if (gPlayer[playerNum].form == FORM_LANDMASTER) { var_v0 = 0xFF; } if (((var_v0 & gFrameCount) == (gPlayerNum * 32)) || arg2) { for (i = 0; i < 100; i++) { playerNum = (s32) (Rand_ZeroOne() * 3.9f); if ((gPlayer[playerNum].state_1C8 != PLAYERSTATE_1C8_13) && !gPlayerInactive[playerNum]) { break; } } if (i > 90) { playerNum = 0; } player->unk_288 = playerNum + 1; Matrix_RotateY(gCalcMatrix, gPlayer[playerNum].unk_114 * M_DTOR, 0); switch (gPlayer[playerNum].form) { case FORM_ARWING: sp58.x = 300.0f; sp58.z = -800.0f; break; case FORM_LANDMASTER: sp58.x = 300.0f; sp58.z = -400.0f; break; case FORM_ON_FOOT: sp58.x = 100.0f; sp58.z = -300.0f; break; } if (Rand_ZeroOne() < 0.5f) { sp58.x *= -1.0f; } sp58.y = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp58, &sp4C); player->camEye.x = gPlayer[playerNum].pos.x + sp4C.x; player->camEye.y = gPlayer[playerNum].pos.y + 50.0f; player->camEye.z = gPlayer[playerNum].unk_138 + sp4C.z; } player->camAt.x = gPlayer[playerNum].pos.x; player->camAt.y = gPlayer[playerNum].pos.y; player->camAt.z = gPlayer[playerNum].unk_138; switch (gPlayer[playerNum].form) { case FORM_ARWING: player->camEye.x += gPlayer[playerNum].vel.x * 0.5f; player->camEye.z += gPlayer[playerNum].vel.z * 0.5f; break; case FORM_LANDMASTER: player->camEye.x += gPlayer[playerNum].vel.x * 0.7f; player->camEye.z += gPlayer[playerNum].vel.z * 0.7f; break; case FORM_ON_FOOT: player->camEye.x += gPlayer[playerNum].vel.x * 0.7f; player->camEye.z += gPlayer[playerNum].vel.z * 0.7f; player->camEye.y = gPlayer[playerNum].unk_068 + 20.0f; player->camAt.y = gPlayer[playerNum].unk_068 + 20.0f; break; } Math_SmoothStepToF(&player->unk_034, 0.0f, 0.05f, 5.0f, 0.00001f); } void func_800B63BC(Player* player, s32 arg1) { Vec3f sp74; Vec3f sp68; f32 temp1; f32 temp2; f32 temp3; f32 var_fv0; f32 eyeX; f32 eyeY; f32 eyeZ; f32 atX; f32 atY; f32 atZ; Matrix_RotateY(gCalcMatrix, (player->unk_114 + (player->unk_134 * 0.2f)) * M_DTOR, 0); Matrix_RotateX(gCalcMatrix, player->unk_134 * 0.2f * M_DTOR, 1); sp74.x = 0.0f; sp74.y = 0.0f; if (player->unk_238 != 0) { sp74.z = 1000.0f - player->unk_08C; } else { sp74.z = 300.0f - player->unk_08C; } if (player->unk_4DC != 0) { sp74.z += 500.0f; } Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68); if (!gVersusMode) { var_fv0 = -gInputPress->stick_y; } else { var_fv0 = -gControllerPress[player->num].stick_y; } Math_SmoothStepToF(&player->unk_02C, var_fv0, 0.05f, 5.0f, 0.0f); eyeX = player->pos.x + sp68.x; eyeY = (player->pos.y * player->unk_148) + 50.0f; eyeY -= (player->unk_02C * 1.5f); eyeZ = player->pos.z + sp68.z; atX = player->pos.x + player->unk_134; var_fv0 = (player->unk_4DC != 0) ? 1.0f : 0.79f; atY = (player->pos.y * (var_fv0)) + player->unk_134 + (player->unk_060 * 5.0f); atY += (player->unk_02C * 0.5f); if (player->state_1C8 == PLAYERSTATE_1C8_5) { atY = player->pos.y; } atZ = player->pos.z; Math_SmoothStepToF(&player->unk_028, 2.0f * player->unk_0E8, 0.05f, 2.0f, 0.02f); sp74.x = -player->unk_028; sp74.y = 0.0f; sp74.z = 0.f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp74, &sp68); eyeX += sp68.x; eyeZ += sp68.z; atX += sp68.x; atZ += sp68.z; if (player->state_1C8 == PLAYERSTATE_1C8_3) { Math_SmoothStepToF(&player->camEye.x, eyeX, player->unk_014, 30000.0f, 0); Math_SmoothStepToF(&player->camEye.y, eyeY, player->unk_014, 30000.0f, 0); Math_SmoothStepToF(&player->camEye.z, eyeZ, player->unk_014, 30000.0f, 0); Math_SmoothStepToF(&player->unk_034, player->unk_0E8 * -0.3f, 0.1f, 1.0f, 0); Math_SmoothStepToF(&player->unk_014, 0.2f, 0.1f, 0.005f, 0.0f); } Math_SmoothStepToF(&player->camAt.x, atX, player->unk_01C, 30000.0f, 0); Math_SmoothStepToF(&player->camAt.y, atY, player->unk_018, 30000.0f, 0); Math_SmoothStepToF(&player->camAt.z, atZ, player->unk_01C, 30000.0f, 0); Math_SmoothStepToF(&player->unk_018, 0.2f, 0.1f, 0.005f, 0); Math_SmoothStepToF(&player->unk_01C, 1.0f, 0.1f, 0.005f, 0); if (arg1 != 0) { player->camEye.x = eyeX; player->camEye.y = eyeY; player->camEye.z = eyeZ; player->camAt.x = atX; player->camAt.y = atY; player->camAt.z = atZ; } } void func_800B6848(Player* player, s32 arg1) { Vec3f sp54; Vec3f sp48; f32 sp44; f32 sp40; f32 sp3C; Matrix_RotateX(gCalcMatrix, player->unk_0E4 * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, player->unk_0EC * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_114 + (player->unk_134 * 0.2f)) * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, player->unk_134 * 0.2f * M_DTOR, 1); sp54.x = 0.0f; if (player->unk_238 != 0) { sp54.y = 150.0f; sp54.z = 500.0f - player->unk_08C; } else { sp54.y = 100.0f; sp54.z = 250.0f - player->unk_08C; } Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48); if (player->unk_238 != 0) { Math_SmoothStepToF(&player->unk_02C, -player->unk_17C * 3.0f + 30.0f, 0.2f, 8.0f, 0.001f); } else { Math_SmoothStepToF(&player->unk_02C, -player->unk_17C * 3.0f, 0.2f, 8.0f, 0.001f); } sp44 = player->pos.x + sp48.x; sp40 = player->pos.y + sp48.y - (player->unk_02C * 0.6f); sp3C = player->pos.z + sp48.z; player->camAt.x = player->pos.x + player->unk_134; player->camAt.y = player->pos.y + 60.0f + player->unk_02C + player->unk_134; player->camAt.z = player->pos.z; Math_SmoothStepToF(&player->unk_028, 2.0f * player->unk_0E8, 0.05f, 2.0f, 0.02f); sp54.x = -player->unk_028; sp54.y = 0.0f; sp54.z = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp54, &sp48); sp44 += sp48.x; sp3C += sp48.z; player->camAt.x += sp48.x; player->camAt.z += sp48.z; Math_SmoothStepToF(&player->camEye.x, sp44, 0.1f, 200.0f, 0.001f); Math_SmoothStepToF(&player->camEye.y, sp40, 0.1f, 200.0f, 0.001f); Math_SmoothStepToF(&player->camEye.z, sp3C, 0.1f, 200.0f, 0.001f); Math_SmoothStepToF(&player->unk_034, player->unk_12C * -0.1f, 0.1f, 1.0f, 0.01f); if (arg1 != 0) { player->camEye.x = sp44; player->camEye.y = sp40; player->camEye.z = sp3C; } } void func_800B6BFC(Player* player, s32 arg1) { Vec3f sp64; Vec3f sp58; f32 temp_fs1; f32 sp50; f32 temp_fs0; Matrix_RotateX(gCalcMatrix, player->unk_0FC * M_DTOR, 0); Matrix_RotateZ(gCalcMatrix, player->unk_100 * M_DTOR, 1); Matrix_RotateY(gCalcMatrix, (player->unk_114 + (player->unk_134 * 0.02f)) * M_DTOR, 1); Matrix_RotateX(gCalcMatrix, player->unk_134 * 0.02f * M_DTOR, 1); sp64.x = 0.0f; sp64.y = 20.0f; sp64.z = 60.0f - player->unk_08C; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp64, &sp58); Math_SmoothStepToF(&player->unk_02C, -player->unk_158 * 0.5f, 0.07f, 3.0f, 0.001f); temp_fs0 = player->pos.x + sp58.x; sp50 = (player->unk_068 + 10.0f + sp58.y) - (player->unk_02C * 0.8f); temp_fs1 = player->pos.z + sp58.z; player->camAt.x = player->pos.x + player->unk_134 * 0.1f; player->camAt.y = player->unk_068 + (player->pos.y - player->unk_068) * 0.4f + 18.0f + player->unk_02C * 1.5f + player->unk_134 * 0.1f; player->camAt.z = player->pos.z; Math_SmoothStepToF(&player->unk_028, player->unk_0E8 * (player->unk_0D0 + 5.0f) * 0.04f, 0.05f, 2.0f, 0.02f); sp64.x = -player->unk_028; sp64.y = 0.0f; sp64.z = 0.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp64, &sp58); temp_fs0 += sp58.x; temp_fs1 += sp58.z; player->camAt.x += sp58.x; player->camAt.z += sp58.z; Math_SmoothStepToF(&player->camEye.x, temp_fs0, 0.3f, 65.0f, 0.001f); Math_SmoothStepToF(&player->camEye.y, sp50, 0.3f, 65.0f, 0.001f); Math_SmoothStepToF(&player->camEye.z, temp_fs1, 0.3f, 65.0f, 0.001f); Math_SmoothStepToF(&player->unk_034, player->unk_12C * -0.1f, 0.1f, 1.0f, 0.01f); if (arg1 != 0) { player->camEye.x = temp_fs0; player->camEye.y = sp50; player->camEye.z = temp_fs1; } } void func_800B6F50(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5) { f32 sp34; f32 sp30; f32 sp2C; f32 sp28; f32 var_ft5; f32 sp20; sp28 = -Math_Atan2F(arg0 - arg3, arg2 - arg5); var_ft5 = sqrtf(SQ(arg2 - arg5) + SQ(arg0 - arg3)); sp2C = -Math_Atan2F(arg1 - arg4, var_ft5); if (sp28 >= M_PI / 2.0f) { sp28 -= M_PI; } if (sp28 <= -M_PI / 2.0f) { sp28 += M_PI; } var_ft5 = 0.0f; if (gCurrentLevel == LEVEL_UNK_15) { var_ft5 = gPlayer->camEye.y * 0.03f; } sp30 = (2.0f * (-sp2C * (-8.0f / 3.0f * M_RTOD))) + 3000.0f + D_80178430 + var_ft5; sp34 = (2.0f * (sp28 * (-8.0f / 3.0f * M_RTOD))) + 3000.0f + D_8017842C; sp20 = D_80178420; D_80178420 = Math_ModF(sp34, 480.0f); D_80178424 = Math_ModF(sp30, 360.0f); if ((gGameState == GSTATE_PLAY) && (gPlayer->state_1C8 == PLAYERSTATE_1C8_2) && (gCurrentLevel == LEVEL_METEO)) { if (fabsf(D_80178420 - sp20) < 50.0f) { D_8015F96C = 0.0f; if (fabsf(D_80178420 - sp20) > 3.0f) { D_8015F96C = fabsf(D_80178420 - sp20 - 3.0f) * 0.5f; } } } } void func_800B7184(Player* player, s32 arg1) { switch (player->form) { case FORM_ON_FOOT: func_800B6BFC(player, arg1); break; case FORM_LANDMASTER: func_800B6848(player, arg1); break; case FORM_ARWING: func_800B63BC(player, arg1); break; } } void func_800B71E4(Player* player) { switch (player->state_1C8) { case 3: switch (gLevelMode) { /* switch 1; irregular */ case 0: /* switch 1 */ if (player->form == FORM_ARWING) { if (player->unk_238 == 0) { func_800B56BC(player); } else { func_800B5D30(player, 0); } } else if (player->form == FORM_LANDMASTER) { func_80043468(player); } else if (player->form == FORM_BLUE_MARINE) { func_E16C50_801AA8E8(player); } break; case 1: /* switch 1 */ func_800B7184(player, 0); break; case 2: /* switch 1 */ func_E9F1D0_801A5FC0(player); break; } break; case 5: player->unk_034 -= player->unk_034 * 0.1f; func_800B7184(player, 0); break; case 4: if ((gLevelMode == LEVELMODE_ON_RAILS) && (player->form == FORM_ARWING)) { player->camEye.x += (player->pos.x - player->camEye.x) * 0.1f; player->camEye.y += (player->pos.y - player->camEye.y) * 0.1f; player->camEye.z -= player->vel.z * 0.2f; if (player->unk_1D0 != 0) { player->camEye.z -= player->vel.z * 0.2f; } player->camAt.x += (player->pos.x - player->camAt.x) * 0.1f; player->camAt.y += (player->pos.y - player->camAt.y) * 0.1f; player->camAt.z = player->unk_138 + D_80177D20 - 1.0f; } break; case 6: case 7: break; } } void func_800B73E0(Player* player) { Vec3f sp44; Vec3f sp38; f32 pad; if ((gCurrentLevel == LEVEL_AQUAS) && (gPlayer->state_1C8 != PLAYERSTATE_1C8_2)) { D_801784D4 = D_801784C8 = D_801784C8 = D_801784FC = D_801784C8 = 110.0f; if (gFrameCount & 0x20) { D_801784D4 = D_801784C8 = D_801784C8 = D_801784FC = D_801784C8 = 90.0f; } D_801784E8 = D_80178510 = D_80178538 = 1.0f; } Math_SmoothStepToAngle(&D_801784B8, D_801784C4, 1.0f, D_801784E8, 0.0f); Math_SmoothStepToAngle(&D_801784BC, D_801784C8, 1.0f, D_801784E8, 0.0f); Math_SmoothStepToAngle(&D_801784C0, D_801784CC, 1.0f, D_801784E8, 0.0f); if (gLight2R < D_80178570) { gLight2R += D_80178540; if (D_80178570 < gLight2R) { gLight2R = D_80178570; } } if (D_80178570 < gLight2R) { gLight2R -= D_80178540; if (gLight2R < D_80178570) { gLight2R = D_80178570; } } if (gLight2G < D_80178574) { gLight2G += D_80178540; if (D_80178574 < gLight2G) { gLight2G = D_80178574; } } if (D_80178574 < gLight2G) { gLight2G -= D_80178540; if (gLight2G < D_80178574) { gLight2G = D_80178574; } } if (gLight2B < D_80178578) { gLight2B += D_80178540; if (D_80178578 < gLight2B) { gLight2B = D_80178578; } } if (D_80178578 < gLight2B) { gLight2B -= D_80178540; if (gLight2B < D_80178578) { gLight2B = D_80178578; } } Math_SmoothStepToAngle(&D_801784EC, D_801784F8, 1.0f, D_80178510, 0.0f); Math_SmoothStepToAngle(&D_801784F0, D_801784FC, 1.0f, D_80178510, 0.0f); Math_SmoothStepToAngle(&D_801784F4, D_80178500, 1.0f, D_80178510, 0.0f); D_801784F8 = D_801784C4 = D_801784D0; D_801784FC = D_801784C8 = D_801784D4; D_80178500 = D_801784CC = D_801784D8; D_801784E8 = 5.0f; D_80178570 = gLight1R; D_80178574 = gLight1G; D_80178578 = gLight1B; pad = player->unk_034; Matrix_RotateZ(gCalcMatrix, M_DTOR * pad, 0); Matrix_RotateX(gCalcMatrix, -player->unk_05C, 1); Matrix_RotateY(gCalcMatrix, player->unk_058, 1); Matrix_Push(&gCalcMatrix); Matrix_RotateX(gCalcMatrix, M_DTOR * D_801784B8, 1); Matrix_RotateY(gCalcMatrix, M_DTOR * D_801784BC, 1); Matrix_RotateZ(gCalcMatrix, M_DTOR * D_801784C0, 1); sp44.x = 0.0f; sp44.y = 0.0f; sp44.z = 100.0f; Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); gLight1x = sp38.x; gLight1y = sp38.y; gLight1z = sp38.z; Matrix_Pop(&gCalcMatrix); Matrix_RotateX(gCalcMatrix, M_DTOR * D_801784EC, 1); Matrix_RotateY(gCalcMatrix, M_DTOR * D_801784F0, 1); Matrix_RotateZ(gCalcMatrix, M_DTOR * D_801784F4, 1); Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp44, &sp38); gLight2x = sp38.x; gLight2y = sp38.y; gLight2z = sp38.z; } void func_800B79B0(void) { s32 var_v0_2; s32 sp40; f32 sp3C; u8 var_a0; u8 sp3A; switch (gCurrentLevel) { case LEVEL_TRAINING: if (gLevelMode == LEVELMODE_ALL_RANGE) { func_DF4260_8019949C(); } break; case LEVEL_VERSUS: func_800C26C8(); D_80177844++; if ((D_80177844 == 200) && (gLaserStrength[0] == 0) && (gLaserStrength[1] == 0) && (gLaserStrength[2] == 0) && (gLaserStrength[3] == 0)) { func_800B852C(OBJ_ITEM_LASERS, &gItems[0]); } if ((D_80177844 == 400) && (gBombCount[0] == 0) && (gBombCount[1] == 0) && (gBombCount[2] == 0) && (gBombCount[3] == 0)) { func_800B852C(OBJ_ITEM_BOMB, &gItems[1]); } if (D_80177844 == 500) { D_80177844 = 0; } break; case LEVEL_VENOM_2: if ((gPlayer->state_1C8 != PLAYERSTATE_1C8_7) && (D_8017827C == 2)) { gPlayer->state_1C8 = PLAYERSTATE_1C8_7; gPlayer->unk_1D0 = 0; gPlayer->unk_234 = 1; gPlayer->pos.z = 15000.0f; func_800B7184(gPlayer, 1); D_80178340 = 255; D_8017835C = 255; D_80178358 = 255; D_80178348 = D_80178350 = D_80178354 = 255; } break; case LEVEL_VENOM_ANDROSS: func_E9F1D0_8018BDD8(); D_80177940 = -25000.0f; gPlayer->unk_0A0 = 612.0f; gPlayer->unk_0A4 = -544.0f; if (D_Timer_80177B44 != 0) { D_Timer_80177B44--; if (D_Timer_80177B44 == 0) { func_E9F1D0_80189214(); } } break; case LEVEL_METEO: Texture_Scroll(D_102FF08, 8, 8, 1); /* fallthrough */ case LEVEL_SECTOR_X: if (D_8017827C == 1) { gBlurAlpha = 128; if (gPlayer->state_1C8 == PLAYERSTATE_1C8_7) { Math_SmoothStepToF(&D_8015F960, 0.0f, 1.0f, 1.0f, 0.0f); } else { Math_SmoothStepToF(&D_8015F960, 128.0f, 1.0f, 1.0f, 0.0f); } } if ((gCurrentLevel == LEVEL_SECTOR_X) && (D_8017827C == 0) && (D_80177E80 == 4)) { D_80177E80++; gPlayer->state_1C8 = PLAYERSTATE_1C8_8; gPlayer->unk_1D0 = 0; gOverlayStage = 1; Audio_PlaySfx(0x1900602A, &D_800C5D28, 0, &D_800C5D34, &D_800C5D34, &D_800C5D3C); D_80177930 = 2; D_800D3180[gCurrentLevel] = 1; } break; case LEVEL_CORNERIA: func_8008C104(D_603EB38, D_6028A60); if (gFrameCount & 1) { Texture_Scroll(D_600CBD8, 64, 32, 3); } break; case LEVEL_AQUAS: func_8008C104(D_603158C, D_602ACC0); break; case LEVEL_SOLAR: func_800A3FEC(); for (D_80177CE8; D_80177CE8 >= 10.0f; D_80177CE8 -= 10.0f) { Texture_Scroll(D_6005710, 32, 32, 1); } if (gPlayer->state_1C8 == PLAYERSTATE_1C8_6) { Texture_Scroll(D_6005710, 32, 32, 1); } Texture_Mottle(D_601E1E8, D_6020F60, 3); if (gPlayer[0].pos.y > 600.0f) { var_v0_2 = 7; sp3A = 5; } else if (gPlayer[0].pos.y > 500.0f) { var_v0_2 = 7; sp3A = 4; } else if (gPlayer[0].pos.y > 400.0f) { var_v0_2 = 3; sp3A = 3; } else if (gPlayer[0].pos.y > 300.0f) { var_v0_2 = 3; sp3A = 2; } else if (gPlayer[0].pos.y > 200.0f) { var_v0_2 = 1; sp3A = 1; } else if (gPlayer[0].pos.y > 100.0f) { var_v0_2 = 0; sp3A = 0; } else { var_v0_2 = 0; } if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && !(gFrameCount & var_v0_2)) { gPlayer[0].shields--; if (gPlayer[0].shields <= 0) { gPlayer[0].shields = 0; } if (gPlayer[0].heal == 0) { if (gPlayer[0].shields == 50) { Audio_PlaySfx(0x49008011, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else if (gPlayer[0].shields == 100) { Audio_PlaySfx(0x49008010, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } } var_a0 = MIN(gPlayer[0].shields, 0xFF); func_8001D1C8(var_a0, sp3A); if (!(gFrameCount & 7) && (gPlayer->state_1C8 != PLAYERSTATE_1C8_7)) { func_E16C50_8019E8B8((Rand_ZeroOne() - 0.5f) * 6000.0f, -80.0f, (Rand_ZeroOne() * 2000.0f) + -6000.0f + gPlayer->unk_138, (Rand_ZeroOne() * 10.0f) + 20.0f); } func_8008C104(D_60229A4, D_6010198); if (gPlayer->shields == 0) { D_80177B4C = 1; } break; case LEVEL_ZONESS: func_800A3FEC(); for (D_80177CE8; D_80177CE8 >= 20.0f; D_80177CE8 -= 20.0f) { Texture_Scroll(D_602C2CC, 32, 32, 1); } if (gPlayer->state_1C8 == PLAYERSTATE_1C8_6) { Texture_Scroll(D_602C2CC, 32, 32, 1); } func_8008C104(D_602C2CC, D_600D990); if (func_800A73E4(&sp3C, &sp40, gPlayer->camEye.x, gPlayer->camEye.y, gPlayer->camEye.z - D_80177D20)) { gLight1R = 0; gLight1G = 7; gLight1B = 10; gAmbientR = gAmbientG = gAmbientB = 0; gFogNear = 990; gFogFar = 994; gBgColor = 0x43; // 0, 8, 8 } else { gBgColor = 0x4107; // 64, 32, 24 gLight1R = 90; gLight1G = 100; gLight1B = 50; gAmbientR = 10; gAmbientG = 20; gAmbientB = 0; gFogNear = 996; gFogFar = 1000; } break; } } void func_800B832C(void) { s32 i; func_800A6590(); for (i = 1; i < 4; i++) { if (gTeamDamage[i] > 0) { gTeamDamage[i] -= 2; gTeamShields[i] -= 2; if (gTeamShields[i] <= 0) { gTeamShields[i] = -1; } } } for (i = 0; i < gCamCount; i++) { gPlayer[i].num = gPlayerNum = i; func_800B48BC(&gPlayer[i]); } Object_UpdateAll(); func_8003D9B8(); func_8007729C(); for (i = 0; i < gCamCount; i++) { gPlayer[i].num = gPlayerNum = i; func_800B71E4(&gPlayer[i]); } D_8017847C = 0.0f; if (D_80178480 != 0) { f32 var_fv1; D_80178480--; var_fv1 = D_80178480; if (var_fv1 > 20.0f) { var_fv1 = 20.0f; } D_8017847C = var_fv1 * __sinf(gFrameCount * 70.0f * M_DTOR); } func_800B79B0(); } void func_800B852C(s32 objId, Item* item) { u8 sp1F = Rand_ZeroOne() * 5.0f; if (D_800D317C == sp1F) { D_80177844 -= 1; } else { D_800D317C = sp1F; if (item->obj.status == 0) { Item_Initialize(item); item->obj.status = 1; item->obj.pos.x = gObjects58[sp1F].obj.pos.x; item->obj.pos.y = gObjects58[sp1F].obj.pos.y; item->obj.pos.z = gObjects58[sp1F].obj.pos.z; item->obj.id = objId; Object_SetInfo(&item->info, item->obj.id); } } } void func_800B86A4(f32* arg0) { *arg0 += D_80177D20 + 15000.0f; } void func_800B86CC(void) { s32 pad1; s32 pad2; s32 pad3; s32 i; f32 sp34; switch (D_80177C70) { case 0: sp34 = 45.0f; break; case 1: sp34 = 45.0f; break; case 2: sp34 = 55.0f; break; } Math_SmoothStepToF(&D_80161A3C, sp34, 0.1f, 5.0f, 0.0f); if (D_80177E84 != 0) { D_80177E84 = 0; gLevelMode = LEVELMODE_ALL_RANGE; if (gCurrentLevel != LEVEL_VENOM_ANDROSS) { MEM_ARRAY_ALLOCATE(gObjects58, 200); } for (i = 0; i < 200; i++) { gObjects58[i].obj.status = 0; } func_800A6148(); if (gCurrentLevel == LEVEL_CORNERIA) { func_800A5338(); } else if (gCurrentLevel == LEVEL_SECTOR_Y) { func_800A55B0(); } else if (gCurrentLevel == LEVEL_VENOM_ANDROSS) { func_800A57E0(); } else if (gCurrentLevel == LEVEL_TRAINING) { func_DF4260_80198C50(); } func_800B86A4(&gPlayer->pos.z); func_800B86A4(&gPlayer->unk_138); gPlayer->camEye.z += 15000.0f; gPlayer->camAt.z += 15000.0f; gPlayer->unk_144 = gPlayer->unk_140 = D_80177D08 = D_80177D20 = 0.0f; } if (D_80177854 != 100) { (void) "play_time = %d\n"; gFrameCount++; } switch (D_80177854) { case 0: if (D_Timer_8017783C == 0) { D_80177854 = 1; } break; case 1: func_800ABAB4(); D_800D2F5C = gVolumeSettings[0]; D_800D2F60 = gVolumeSettings[1]; D_800D2F64 = gVolumeSettings[2]; D_80177854 = 2; break; case 2: if (!((D_80177838 == 0) && (D_80177840 == 0))) { D_801779BC = 0; } else { D_801779BC = 1; } gDrawMode = DRAWMODE_4; func_800B832C(); if ((gControllerPress[gMainController].button & START_BUTTON) && (gPlayer->state_1C8 == PLAYERSTATE_1C8_2) && gSaveFile.save.data.planet[D_800D2F6C[gCurrentLevel]].normalClear) { func_8001AE58(); func_8001D400(0); func_800A6148(); for (i = 0; i < gCamCount; i++) { Audio_KillSfx(gPlayer[i].unk_460_arr); func_8001CA24(i); } D_80177854 = 1; gDrawMode = gVersusMode = 0; gCamCount = 1; gBgColor = 0; D_80177A80 = D_80177840 = D_80177838 = gRadioState = 0; D_8017782C = 0; } if (gVersusMode) { func_800C1E9C(); } if ((gControllerPress[gMainController].button & START_BUTTON) && (D_801779BC != 0)) { func_8001D638(1); D_80177854 = 100; D_80177868 = 4; D_80178484 = 100000; } break; case 100: if (!gVersusMode) { if ((gControllerPress[gMainController].button & R_TRIG) && (gPlayer[0].form != FORM_BLUE_MARINE) && (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_0)) { if (D_800D2860[0] = 1 - D_800D2860[0]) { Audio_PlaySfx(0x49000019, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } else { Audio_PlaySfx(0x4900101A, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); } } } else { for (i = 0; i < 4; i++) { if ((gControllerPress[i].button & R_TRIG) && (gPlayer[i].form != FORM_ON_FOOT)) { if (D_800D2860[i] = 1 - D_800D2860[i]) { func_80060F30(gPlayer[i].unk_460_arr, 0x49000019, i); } else { func_80060F30(gPlayer[i].unk_460_arr, 0x4900101A, i); } } } } if ((D_80177868 == 4) && (gControllerPress[gMainController].button & START_BUTTON) && (D_801779BC != 0)) { func_8001D638(0); D_80177854 = 2; gDrawMode = DRAWMODE_4; } D_801779BC = 1; break; } }