fox_ti_cs decompiled (#83)

* A few fox_ti_cs functions

* func_i5_8018769C

* actor

* space

* MISSION ACCOMPLISHED

* remove padding in data

* pass

* pr review
This commit is contained in:
Alejandro Asenjo Nitti
2024-01-16 14:15:25 -03:00
committed by GitHub
parent b975246483
commit 431ae096fb
3 changed files with 538 additions and 7 deletions
+5
View File
@@ -145,6 +145,10 @@ void func_8004319C(Player* player, f32 arg1, f32 arg2, f32 arg3);
// fox_43E80
void func_80043468(Player* player);
void func_800444BC(Player * player);
void func_80044868(Player*);
void func_80045130(Player*);
void func_80045678(Player*);
void func_80045E7C(Player*);
void func_80047504(Player * player);
void func_80046358(Player*);
@@ -521,6 +525,7 @@ s32 Play_CheckMedalStatus(u16);
s32 Play_GetMaxShields(void);
void func_800A6028(Vec3f*, u32);
void func_800A5844(void);
void func_800A594C(void);
void func_800A5D6C(void);
void func_800A5FA0(Vec3f* , u32 , s32 );
void func_800A6070(Vec3f* arg0, u32 arg1);
+532 -6
View File
@@ -1,11 +1,537 @@
#include "common.h"
#include "global.h"
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/fox_ti_cs/func_i5_80187530.s")
Vec3f D_i5_801B72A0[] = { 500.0f, -700.0f, 200.0f, -500.0f, -700.0f, 200.0f };
Vec3f D_i5_801B72B8[] = { 40.0f, 10.0f, 30.0f, 41.0f, 10.0f, 10.0f, 43.0f, 10.0f, -10.0f, 45.0f, 10.0f, -30.0f,
-40.0f, 10.0f, 30.0f, -41.0f, 10.0f, 10.0f, -43.0f, 10.0f, -10.0f, -45.0f, 10.0f, -30.0f };
f32 D_i5_801B7318[] = { 1000.0f, -1000.0f, 0.0f, 0.0f };
f32 D_i5_801B7328[] = { 1000.0f, 1000.0f, 1000.0f, 4000.0f };
f32 D_i5_801B7338[] = { 1000.0f, 1000.0f, 1000.0f, -4000.0f };
f32 D_i5_801B7348[] = { 90.0f, -90.0f, 0.0f };
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/fox_ti_cs/func_i5_801875D0.s")
void func_i5_80187530(Actor* actor) {
Actor_Initialize(actor);
actor->obj.status = 1;
actor->obj.id = OBJ_ACTOR_195;
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/fox_ti_cs/func_i5_8018769C.s")
actor->obj.pos.x = 0.0f;
actor->obj.pos.y = 3000.0f;
actor->obj.pos.z = 0.0f;
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/fox_ti_cs/func_i5_80188108.s")
actor->obj.rot.y = 180.0f;
Object_SetInfo(&actor->info, actor->obj.id);
Audio_PlaySfx(0x11030010U, &actor->sfxPos, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
actor->unk_0B6 = 1;
}
#pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_i5/fox_ti_cs/func_i5_801882CC.s")
void func_i5_801875D0(Actor* actor, s32 arg1) {
Actor_Initialize(actor);
actor->obj.status = 1;
actor->obj.id = OBJ_ACTOR_195;
actor->obj.pos.x = D_i5_801B72A0[arg1].x;
actor->obj.pos.y = D_i5_801B72A0[arg1].y + 3000.0f;
actor->obj.pos.z = D_i5_801B72A0[arg1].z;
actor->obj.rot.y = 180.0f;
actor->iwork[11] = 1;
Object_SetInfo(&actor->info, actor->obj.id);
Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
void func_i5_8018769C(Player* player) {
f32 sp64;
Actor* actor = &gActors[3];
Vec3f sp54;
Vec3f sp48;
sp64 = 20000.0f;
switch (player->unk_1D0) {
case 0:
D_80177A80 = 0;
D_80177BAC = 1;
player->unk_0D4 = 0.0f;
func_i5_80187530(&gActors[3]);
if (gTeamShields[1] > 0) {
func_i5_801875D0(&gActors[10], 0);
}
if (gTeamShields[3] > 0) {
func_i5_801875D0(&gActors[11], 1);
}
player->pos.x = actor->obj.pos.x;
player->pos.y = actor->obj.pos.y - 530.0f;
player->pos.z = actor->obj.pos.z;
player->camEye.x = D_80177978 = 5000.0f;
player->camEye.y = D_80177980 = 1000.0f;
player->camEye.z = D_80177988 = -5000.0f;
player->camAt.x = D_801779A0 = player->pos.x;
player->camAt.y = D_801779B8 = player->pos.y;
player->camAt.z = D_801779C0 = player->pos.z;
player->unk_240 = 1;
player->unk_1D0 = 1;
gFogFar = 1006;
gPlayer->unk_19C = 0;
gBgColor = 0x78C1;
case 1:
D_80177A48[0] = 0.01f;
sp64 = 20.0f;
D_80177978 = actor->obj.pos.x - 500.0f;
D_80177980 = actor->obj.pos.y - 500.0f;
D_80177988 = actor->obj.pos.z - 750.0f;
if (D_80177A80 == 330) {
func_800BA808(gMsg_ID_4113, RCID_FOX);
}
if (D_80177A80 == 430) {
player->unk_1D0 = 2;
player->timer_1F8 = 10;
Audio_PlaySfx(0x09000002U, &player->unk_460, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
D_801779A0 = player->pos.x;
D_801779B8 = player->pos.y;
D_801779C0 = player->pos.z;
break;
case 2:
Math_SmoothStepToF(&player->vel.z, -10.0f, 1.0f, 1.0f, 0.0f);
D_801779A0 = player->pos.x;
D_801779B8 = player->pos.y;
D_801779C0 = player->pos.z;
if (player->timer_1F8 == 1) {
player->unk_0D4 = 1.0f;
D_80177A48[0] = 0.05f;
}
if (player->timer_1F8 == 0) {
if (player->unk_0D4 > -0.3f) {
player->unk_0D4 = player->unk_0D4 - 0.05f;
}
}
if ((D_80177A80 > 450) && (D_80177A80 < 490)) {
Math_SmoothStepToF(&player->unk_170, 2.0f, 1.0f, 0.2f, 0.0f);
Math_SmoothStepToF(&player->unk_16C, 2.0f, 1.0f, 0.2f, 0.0f);
} else {
Math_SmoothStepToF(&player->unk_170, 0.5f, 1.0f, 0.2f, 0.0f);
Math_SmoothStepToF(&player->unk_16C, 0.5f, 1.0f, 0.2f, 0.0f);
}
if (D_80177A80 == 500) {
D_80177A80 = 480;
player->unk_1D0 = 3;
player->unk_144 = 200.0f;
D_80177D20 = 200.0f;
D_80177CC8 = D_80177D20;
player->pos.z = -(D_80177D20) -200.0f;
player->unk_0D4 = 0.0f;
player->vel.y = 0.0f;
player->pos.y = 2000.0f;
player->vel.z = 0.0f;
player->camAt.x = D_801779A0 = player->pos.x;
player->camAt.y = D_801779B8 = player->pos.y;
player->camAt.z = D_801779C0 = player->pos.z;
gPlayer->unk_19C = 1;
gBgColor = 0x2089;
player->unk_16C = 0.5f;
player->unk_170 = 0.5f;
D_80177A48[2] = -270.0f;
D_80177A48[3] = 200.0f;
D_80177A48[1] = 0.0f;
*D_80177A10 = 0;
Matrix_RotateY(gCalcMatrix, D_80177A48[2] * M_DTOR, 0);
sp54.x = 0.0f;
sp54.y = 30.0f;
sp54.z = D_80177A48[3];
Matrix_MultVec3f(gCalcMatrix, &sp54, &sp48);
D_80177978 = sp48.x;
player->camEye.x = sp48.x;
D_80177980 = sp48.y;
player->camEye.y = sp48.y;
player->camEye.z = D_80177988 = player->pos.z + player->unk_144 + sp48.z;
}
break;
case 3:
Math_SmoothStepToF(&D_80177A48[2], 0.0f, 0.1f, 4.0f, 0.0f);
Matrix_RotateY(gCalcMatrix, D_80177A48[2] * M_DTOR, 0);
sp54.x = 0.0f;
sp54.y = 30.0f;
sp54.z = D_80177A48[3];
Matrix_MultVec3f(gCalcMatrix, &sp54, &sp48);
D_80177978 = sp48.x;
D_80177980 = sp48.y;
D_80177988 = player->pos.z + player->unk_144 + sp48.z;
D_801779A0 = player->pos.x;
player->camAt.x = D_801779A0;
player->camAt.y = D_801779B8 = player->pos.y;
player->camAt.z = D_801779C0 = player->pos.z + player->unk_144;
Math_SmoothStepToF(&player->pos.y, D_80177A48[1], 0.1f, 50.0f, 0.0f);
if (player->pos.y < 200.0f) {
Math_SmoothStepToF(&player->unk_170, 1.0f, 1.0f, 0.2f, 0.0f);
Math_SmoothStepToF(&player->unk_16C, 1.0f, 1.0f, 0.2f, 0.0f);
Math_SmoothStepToF(&D_80177A48[1], 70.0f, 0.05f, 1.0f, 0.0f);
Math_SmoothStepToF(&D_80177A48[3], 400.0f, 1.0f, 5.0f, 0.0f);
if (D_80177A10[0] == 0) {
D_80177A10[0]++;
Audio_PlaySfx(0x01008016U, &player->unk_460, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
}
}
if (player->pos.y < 100.0f) {
func_8007A900(((Rand_ZeroOne() - 0.5f) * 30.0f) + player->pos.x, 30.0f,
((Rand_ZeroOne() - 0.5f) * 30.0f) + player->unk_138, (2.0f * Rand_ZeroOne()) + 3.5f, 255,
12, 1);
Object_Kill(&gActors[3].obj, &gActors[3].sfxPos);
}
Math_SmoothStepToF(&player->unk_0F0, __sinf(((gFrameCount) *5.0f) * M_DTOR) * 10.0f, 0.1f, 100.0f, 0.0f);
if (D_80177A80 == 0x244) {
D_80177838 = 0x32;
player->state_1C8 = PLAYERSTATE_1C8_3;
player->unk_1D0 = player->timer_1F8 = player->timer_1FC = player->unk_240 = 0;
player->unk_0D4 = 3.0f;
player->unk_014 = 0.0f;
D_8017782C = 1;
func_800A594C();
D_8017782C = 0;
if ((gControllerHold[player->num].button & Z_TRIG) && (gControllerHold[player->num].button & R_TRIG)) {
func_8001A55C(&player->unk_460, 0x01008016);
}
}
break;
}
player->pos.y += player->vel.y;
player->vel.y -= player->unk_0D4;
player->pos.z += player->vel.z;
player->unk_138 = player->pos.z;
Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], sp64, 0.00f);
Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], sp64, 0.00f);
Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], sp64, 0.00f);
Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], sp64, 0.00f);
Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], sp64, 0.00f);
Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], sp64, 0.00f);
}
void func_i5_80188108(Actor* actor, s32 arg1) {
Player* player = &gPlayer[0];
Actor_Initialize(actor);
actor->obj.pos.x = D_i5_801B7318[arg1] + player->pos.x;
actor->obj.pos.y = D_i5_801B7328[arg1] + player->pos.y;
actor->obj.pos.z = D_i5_801B7338[arg1] + player->pos.z;
actor->fwork[7] = Rand_ZeroOne() * 360.0f;
actor->fwork[8] = Rand_ZeroOne() * 360.0f;
actor->vel.x = player->vel.x;
actor->vel.y = player->vel.y;
actor->vel.z = player->vel.z;
actor->obj.status = 1;
actor->obj.id = OBJ_ACTOR_195;
actor->obj.rot.y = 180.0f;
Object_SetInfo(&actor->info, actor->obj.id);
if (arg1 < 3) {
actor->iwork[11] = 1;
actor->unk_0C9 = 1;
actor->fwork[3] = D_i5_801B7348[arg1];
actor->unk_0B8 = 30;
Audio_PlaySfx(0x3100000CU, &actor->sfxPos, 4U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
} else {
actor->unk_0B6 = 1;
actor->unk_0B8 = 20;
Audio_PlaySfx(0x11030010U, &actor->sfxPos, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
actor->fwork[9] = 20.0f;
}
}
void func_i5_801882CC(Player* player) {
f32 x;
f32 camAtY = 0.0f;
Vec3f src;
Vec3f dest;
s32 i;
switch (player->unk_1D0) {
case 0:
D_80177A80 = D_80178284 = D_80178488 = 0;
func_800A6148();
player->unk_1D0 = 1;
D_80177A48[0] = 0.0f;
D_80177A48[1] = 0.0f;
D_80177A48[2] = 0.0f;
D_80177A48[3] = 250.0f;
player->unk_0D4 = 3.0f;
func_i5_80188108(gActors, 0);
if (gTeamShields[1] > 0) {
func_i5_80188108(&gActors[1], 1);
}
if (gTeamShields[3] > 0) {
func_i5_80188108(&gActors[2], 2);
}
func_8001A55C(&player->unk_460_arr[0], 0x01004024U);
case 1:
Math_SmoothStepToF(D_80177A48, 0.1f, 1.0f, 0.01f, 0.0f);
Math_SmoothStepToF(&player->unk_0D0, 4.9f, 0.1f, 1.0f, 0.0f);
Math_SmoothStepToF(&player->unk_08C, 0.0f, 0.1f, 1.0f, 0.0f);
if (D_80177A80 < 0x460) {
Math_SmoothStepToF(&D_80177A48[1], 0.65f, 0.1f, 0.01f, 0.0f);
} else {
Math_SmoothStepToF(&D_80177A48[1], 0.0f, 0.1f, 0.02f, 0.0f);
}
D_80177A48[2] = D_80177A48[1] + D_80177A48[2];
Matrix_RotateX(gCalcMatrix, -0.17453292f, 0);
Matrix_RotateY(gCalcMatrix, D_80177A48[2] * M_DTOR, 1);
src.x = 0.0f;
src.y = 0.0f;
src.z = D_80177A48[3];
Matrix_MultVec3f(gCalcMatrix, &src, &dest);
D_80177978 = player->pos.x + dest.x;
D_80177980 = player->pos.y + dest.y;
D_80177988 = player->pos.z + player->unk_144 + dest.z + 50.0f;
if (D_80177980 < 5.0f) {
D_80177980 = 5.0f;
}
D_801779A0 = player->pos.x;
D_801779B8 = player->pos.y + 30.0f;
D_801779C0 = player->pos.z + player->unk_144;
func_80045130(player);
func_80044868(player);
func_80045678(player);
func_80045E7C(player);
func_800A8BA4(player);
func_800ADF58(player);
if (!(gFrameCount & 3)) {
f32 x;
f32 y;
f32 z;
for (i = 0; i < 8; i++) {
x = D_i5_801B72B8[i].x;
y = D_i5_801B72B8[i].y + (Rand_ZeroOne() - 0.5f) * 10.0f;
z = D_i5_801B72B8[i].z;
func_8007A900(player->pos.x + x, player->pos.y + y, player->unk_138 + z,
(Rand_ZeroOne() * 0.5f) + 0.5f, 255, 21, 0);
}
}
break;
case 2:
Math_SmoothStepToF(D_80177A48, 0.1f, 1.0f, 0.01f, 0.0f);
D_80177978 -= 2.5f;
D_80177988 -= 1.0f;
D_801779A0 = player->pos.x;
D_801779B8 = player->pos.y + 30.0f;
D_801779C0 = player->pos.z + player->unk_144;
if (player->pos.y < 100.0f) {
camAtY = __sinf((gFrameCount * 130.0f) * 0.017453292f) * 3.0f;
}
Math_SmoothStepToF(&player->unk_170, 2.0f, 1.0f, 0.2f, 0.0f);
Math_SmoothStepToF(&player->unk_16C, 2.0f, 1.0f, 0.2f, 0.0f);
if (D_80177A80 < 1470) {
func_8007A900(((Rand_ZeroOne() - 0.5f) * 30.0f) + (player->pos.x + 30.0f), 30.0f,
((Rand_ZeroOne() - 0.5f) * 30.0f) + player->unk_138, (2.0f * Rand_ZeroOne()) + 3.5f, 255,
12, 1);
}
func_8007A900(((Rand_ZeroOne() - 0.5f) * 30.0f) + (player->pos.x - 30.0f), 30.0f,
((Rand_ZeroOne() - 0.5f) * 30.0f) + player->unk_138, (2.0f * Rand_ZeroOne()) + 3.5f, 255, 12,
1);
Math_SmoothStepToF(&player->unk_0F0, __sinf((gFrameCount * 6.0f) * 0.017453292f) * 18.0f, 0.1f, 100.0f,
0.0f);
Math_SmoothStepToF(&player->unk_080, __sinf((gFrameCount * 3.0f) * 0.017453292f) * 5.0f, 0.1f, 100.0f,
0.0f);
x = __sinf((gFrameCount * 4.0f) * 0.017453292f) * -1.5f;
player->vel.x = x;
player->vel.y += 0.1f;
player->vel.z -= 0.17f;
player->pos.x += x;
player->pos.y += player->vel.y;
player->pos.z += player->vel.z;
player->unk_138 = player->pos.z;
break;
}
switch (D_80177A80) {
case 831:
D_80177830 = 1;
break;
case 1031:
D_80177830 = 0;
break;
case 50:
func_8001D444(0U, 0x26U, 0U, 0xFFU);
break;
case 80:
D_80177840 = 100;
break;
case 160:
func_800BA808(gMsg_ID_20010, RCID_FOX);
break;
case 248:
func_800BA808(gMsg_ID_4100, RCID_SLIPPY);
break;
case 380:
switch (gTeamShields[1]) {
case -1:
func_800BA808(gMsg_ID_20331, RCID_ROB64);
break;
case 0:
func_800BA808(gMsg_ID_20343, RCID_ROB64);
break;
default:
func_800BA808(gMsg_ID_4101, RCID_FALCO);
break;
}
break;
case 525:
switch (gTeamShields[3]) {
case -1:
func_800BA808(gMsg_ID_20332, RCID_ROB64);
break;
case 0:
func_800BA808(gMsg_ID_20344, RCID_ROB64);
break;
default:
func_800BA808(gMsg_ID_4102, RCID_PEPPY);
break;
}
break;
case 671:
func_800BA808(gMsg_ID_4103, RCID_FOX);
break;
case 1200:
gActors->unk_0B8++;
break;
case 1220:
gActors[1].unk_0B8++;
break;
case 1240:
gActors[2].unk_0B8++;
break;
case 1280:
gOverlayStage = 5;
break;
case 1300:
player->unk_1D0++;
D_80177A48[0] = 0.0f;
player->vel.z = 0.0f;
player->vel.y = 0.0f;
func_i5_80188108(&gActors[3], 3);
D_80161A44 = 30000.0f;
player->unk_240 = 1;
func_8001CA24(0);
Audio_PlaySfx(0x01008016U, &player->unk_460, 0U, &D_800C5D34, &D_800C5D34, &D_800C5D3C);
break;
}
Math_SmoothStepToF(&player->camEye.x, D_80177978, D_80177A48[0], 20000.0f, 0.00f);
Math_SmoothStepToF(&player->camEye.y, D_80177980, D_80177A48[0], 20000.0f, 0.00f);
Math_SmoothStepToF(&player->camEye.z, D_80177988, D_80177A48[0], 20000.0f, 0.00f);
Math_SmoothStepToF(&player->camAt.x, D_801779A0, D_80177A48[0], 20000.0f, 0.00f);
Math_SmoothStepToF(&player->camAt.y, D_801779B8, D_80177A48[0], 20000.0f, 0.00f);
Math_SmoothStepToF(&player->camAt.z, D_801779C0, D_80177A48[0], 20000.0f, 0.00f);
player->camAt.y += camAtY;
if (D_80177A80 == 0x564) {
func_800182F4(0x103C00FF);
func_800182F4(0x113C00FF);
}
if (D_80177A80 > 1440) {
D_80178348 = D_80178350 = D_80178354 = 0;
D_80178358 = 255;
if (D_80178340 == 255) {
player->state_1C8 = PLAYERSTATE_1C8_6;
D_8017837C = 4;
func_800A6148();
func_8001DBD0(10);
D_800D3180[12] = Play_CheckMedalStatus(150) + 1;
}
}
}
+1 -1
View File
@@ -117,7 +117,7 @@
- [0xE7CC10, c, fox_ma]
- [0xE97CC0, c, E97CC0]
- [0xE9A580, .data, fox_i5]
- [0xE9A590, data, fox_ti_cs]
- [0xE9A590, .data, fox_ti_cs]
- [0xE9A650, data, fox_ti]
- [0xE9DC00, data, E97CC0]
- [0xE9DCD0, .rodata, fox_i5]