2024-01-21 17:00:53 +03:00
|
|
|
#include "prevent_bss_reordering.h"
|
2023-11-22 17:56:29 +03:00
|
|
|
#include "global.h"
|
|
|
|
|
2023-12-09 21:53:24 +03:00
|
|
|
Vec3f D_801615D0;
|
|
|
|
Vec3f D_801615E0;
|
|
|
|
s32 D_801615EC;
|
|
|
|
Matrix D_801615F0;
|
2023-12-14 17:41:43 +03:00
|
|
|
WingInfo D_80161630;
|
2023-12-09 21:53:24 +03:00
|
|
|
|
2024-02-06 22:38:23 +03:00
|
|
|
#include "fox_edisplay_assets.h"
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
char D_800CF970[] = "$Id: fox_edisplay.c,v 1.196 1997/05/08 08:31:50 morita Exp $";
|
|
|
|
|
2023-11-22 17:56:29 +03:00
|
|
|
void func_800596C0(void) {
|
2024-01-17 18:36:58 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, gGameFrameCount * 13.0f * M_DTOR, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.02f, 0.98f, 1.0f, 1);
|
2024-01-17 18:36:58 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, -(f32) gGameFrameCount * 13.0f * M_DTOR, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.02f, 0.98f, 1.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_800597C0(s32 arg0) {
|
|
|
|
if (arg0 < 0) {
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_FRONT);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-24 22:28:35 +03:00
|
|
|
void Graphics_SetScaleMtx(f32 scale) {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059850(Object_4C* obj4C) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 60);
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_800598DC(s32 arg0) {
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_800598E8(Actor* actor) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6025B50);
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_800599A4(s32 limbIndex, Vec3f* rot, void* index) {
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp24;
|
|
|
|
Vec3f sp18;
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
if (limbIndex == 1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp24.x = 0.0f;
|
|
|
|
sp24.y = 0.0f;
|
|
|
|
sp24.z = 0.0f;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp24, &sp18);
|
2024-01-14 01:45:37 +03:00
|
|
|
gActors[*((s32*) index)].fwork[0] = sp18.y;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
f32 D_800CF9B0[] = {
|
2023-12-04 21:50:52 +03:00
|
|
|
-12.324226f, -12.008495f, -11.083107f, -9.56147f, -7.440754f, -4.713318f, -1.393303f, 2.48587f,
|
|
|
|
6.872662f, 11.668991f, 16.752102f, 21.98127f, 27.193024f, 32.21534f, 36.875694f, 41.007812f,
|
|
|
|
44.462303f, 47.094223f, 48.761005f, 49.345966f, 47.6453f, 42.988186f, 36.062622f, 27.662722f,
|
|
|
|
18.646473f, 9.883305f, 2.113918f, -4.157948f, -8.673706f, -11.395222f, -12.324226f,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
f32 D_800CFA2C[] = {
|
|
|
|
1.0f, 1.0f, 0.95f, 0.9f, 0.85f, 0.8f, 0.75f, 0.7f, 0.65f, 0.6f,
|
|
|
|
};
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_80059A24(Actor* actor) {
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp30[30];
|
2024-01-14 01:45:37 +03:00
|
|
|
f32 temp = D_800CF9B0[actor->unk_0B6] - 114.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.f, -temp, 0.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-14 01:45:37 +03:00
|
|
|
Animation_GetFrameData(&D_601E8C4, actor->unk_0B6, sp30);
|
|
|
|
Animation_DrawSkeleton(1, D_601E9D0, sp30, NULL, func_800599A4, &actor->index, &gIdentityMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059AEC(Object_80* obj80) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_601AE40);
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059B20(Object_80* obj80) {
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj80->obj.id == OBJ_80_29) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_7007350);
|
|
|
|
} else {
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(D_800CF9B0[obj80->obj.id + 2]);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_700BB10);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80059BB0(void* arg0) {
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059BBC(Object_80* obj80) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6023AC0);
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_80059BF0(Actor* actor) {
|
|
|
|
if (actor->unk_0B6 != 0) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6032BC0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80059C28(void* arg0) {
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059C34(Object_4C* obj4C) {
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_80059C40(Object_4C* obj4C) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_47(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 180);
|
2023-12-19 17:54:50 +03:00
|
|
|
switch (obj4C->unk_45) {
|
2023-12-14 17:41:43 +03:00
|
|
|
case 0:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 2.0f, 1.0f, 0.7f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 21:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 0.7f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 6:
|
|
|
|
case 7:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 10.55f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_Gfx_800DAC20);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 56:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.6f, 1.0f, 1.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 20:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.2f, 1.0f, 1.3f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 22:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 2.2f, 1.0f, 1.4f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_80059F68(Item* item) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -95.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_602DA20);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_80059FDC(Item* item) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6035DA0);
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_8005A010(Object_4C* obj4C) {
|
|
|
|
if (obj4C->unk_48 == 0) {
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_60361F0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8005A07C(void* arg0) {
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8005A088(void* arg0) {
|
|
|
|
}
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
Gfx* D_800CFA54[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_6027960, D_60273A0, D_60183B0, D_60121E0, D_602A2E0, D_602A720, D_602B8F0, D_602A8C0, D_6028E70, D_602E0A0,
|
|
|
|
D_602DE70, D_602DC40, D_602D830, D_602D340, D_6031280, D_6031130, D_6030850, D_6030FD0, D_602DD40, D_6033AF0,
|
|
|
|
D_60186E0, D_6024160, D_6033290, D_6017F10, D_60074E0, D_6007590, D_6007730, D_6005CC0,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
Gfx* D_800CFAC4[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_60176D0, D_6017810, D_6017770, D_6016D90, D_6016E30, D_60178B0,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
Gfx* D_800CFADC[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_6023690, D_6021BB0, D_6021C50, D_6021CE0, D_6021D80, D_6016350,
|
|
|
|
D_6021E20, D_60222A0, D_6022BE0, D_6022D70, D_6022F00,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
2024-02-06 22:38:23 +03:00
|
|
|
Gfx* D_800CFB08[] = { D_6020F10, D_6021100, D_60214B0 };
|
|
|
|
Gfx* D_800CFB14[] = { D_60163E0, D_60165D0, D_6016880, D_6016B50, D_6000C40 };
|
|
|
|
Gfx* D_800CFB28[] = { D_6018E80, D_601F620, D_601F420, D_6018C80, D_601F940, D_601F260 };
|
2023-11-27 00:27:05 +03:00
|
|
|
Gfx* D_800CFB40[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_6014DB0, D_60146D0, D_6014B80, D_6014470, D_6014930, D_60138A0, D_60151A0, D_600F750, D_6015810,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
Gfx* D_800CFB64[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_600D4A0, D_600D720, D_600D810, D_600CFF0, D_600BD20, D_600D390, D_600E150, D_6007160, D_600D900,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
Gfx* D_800CFB88[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_600A8E0, D_600A840, D_600A480, D_600A720, D_600A970, D_6007D70, D_600A520, D_6009990,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
Gfx* D_800CFBA8[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_6026460, D_60266B0, D_6026950, D_60276F0, D_6027810, D_6027330, D_60273C0, D_6026E30,
|
|
|
|
D_6026EC0, D_6026DA0, D_6026D10, D_6026C80, D_6026BF0, D_6027460, D_6026F60,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
2024-02-06 22:38:23 +03:00
|
|
|
Gfx* D_800CFBE4[] = { D_60040F0, D_6027C90, D_6027FA0, D_6003350, D_6028240,
|
|
|
|
D_6028550, D_6004DB0, D_6027930, D_600F030, D_60050F0 };
|
2023-11-27 00:27:05 +03:00
|
|
|
Gfx* D_800CFC0C[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_60294A0, D_60291B0, D_60287F0, D_6029330, D_6029240, D_6029790, D_6029900,
|
|
|
|
D_6028F50, D_60290C0, D_6029530, D_60296A0, D_6028A80, D_6028910,
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
2024-02-06 22:38:23 +03:00
|
|
|
Gfx* D_800CFC40[] = { D_6014FD0, D_6014FD0, D_6014FD0, D_6014FD0 };
|
|
|
|
Gfx* D_800CFC50[] = { D_601EDE0, D_601F2F0, D_601F830, D_601FD70, D_601D110 };
|
|
|
|
Gfx* D_800CFC64[] = { D_6023940, D_6023D70, D_60249C0, D_6023EB0, D_60249C0, D_6023B80 };
|
2023-11-27 00:27:05 +03:00
|
|
|
Gfx* D_800CFC7C[] = {
|
2024-02-06 22:38:23 +03:00
|
|
|
D_601B570, D_601B710, D_60209B0, D_6020B70, D_6020D50, D_601B8F0, D_601B3B0, D_601B1C0, D_6011660
|
2023-11-27 00:27:05 +03:00
|
|
|
};
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005A094(Actor* actor) {
|
2024-01-24 17:45:55 +03:00
|
|
|
switch (actor->state) {
|
2023-11-22 17:56:29 +03:00
|
|
|
case 0:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 18.0f, 15.0f, -15.0f, 1);
|
2023-11-27 00:27:05 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_PI, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_3016660);
|
|
|
|
break;
|
|
|
|
case 1:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, -18.0f, 15.0f, -15.0f, 1);
|
2023-11-27 00:27:05 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_PI, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_3015D80);
|
|
|
|
break;
|
|
|
|
case 2:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_30155E0);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_3011720);
|
|
|
|
break;
|
|
|
|
case 4:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
if (actor->index & 1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_10194C0);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024290);
|
|
|
|
}
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 39:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
2024-01-14 01:45:37 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFAC4[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 40:
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
|
2024-01-14 01:45:37 +03:00
|
|
|
switch (actor->unk_048) {
|
2023-11-22 17:56:29 +03:00
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
case 1:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x3D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
break;
|
|
|
|
case 2:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x39);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
break;
|
|
|
|
case 3:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x21);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel != LEVEL_SOLAR) {
|
2024-01-14 07:30:21 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_i5_801B769C[actor->unk_046]);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-07 01:39:23 +03:00
|
|
|
if (gBosses[0].fwork[3] < 4800.0f) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1E);
|
2023-12-14 17:41:43 +03:00
|
|
|
gDPSetFogColor(gMasterDisp++, 0x40, 0x20, 0x20, gFogAlpha);
|
|
|
|
gSPFogPosition(gMasterDisp++, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1E);
|
2023-12-14 17:41:43 +03:00
|
|
|
gDPSetFogColor(gMasterDisp++, 0x10, 0x10, 0x10, gFogAlpha);
|
|
|
|
gSPFogPosition(gMasterDisp++, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB40[actor->unk_046]);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 41:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFADC[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 42:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB08[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 43:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB14[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 44:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB28[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 45:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_40018A0);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 46:
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->unk_048 == 2) || (actor->unk_048 == 3) || (actor->unk_048 == 4)) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x21);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
2024-01-14 07:30:21 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_i5_801B7584[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 47:
|
2024-01-14 07:30:21 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_i5_801B7608[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 48:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB64[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 49:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFB88[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 50:
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(0.7f);
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->iwork[1] == 1) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1E);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
|
2024-01-14 01:45:37 +03:00
|
|
|
} else if (actor->iwork[1] == 2) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1E);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(0.7f);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
switch (actor->iwork[0]) {
|
2023-11-22 17:56:29 +03:00
|
|
|
case 0:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_90234D0);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_9023290);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_900D180);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_9010FD0);
|
|
|
|
break;
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->iwork[1] != 0) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(0.7f);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 51:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFBA8[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 52:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFBE4[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 53:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFC0C[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 54:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFC40[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 55:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFC50[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 56:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x29);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 191, 255, 223, 255);
|
2024-01-14 01:45:37 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFC64[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 58:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_60148B0);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 59:
|
2024-01-14 01:45:37 +03:00
|
|
|
Graphics_SetScaleMtx(actor->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-14 01:45:37 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFC7C[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 70:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_10177C0);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 57:
|
2024-01-14 07:30:21 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_i1_8019A008[actor->unk_048]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
|
|
|
default:
|
2024-01-24 17:45:55 +03:00
|
|
|
if (actor->state > 9) {
|
|
|
|
if (actor->state == 0x24) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
}
|
2024-01-24 17:45:55 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFA54[actor->state - 10]);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005ADAC(Actor* actor) {
|
2023-11-22 17:56:29 +03:00
|
|
|
f32 sp5C;
|
|
|
|
f32 temp1;
|
|
|
|
f32 sp54;
|
|
|
|
s32 pad[5]; // fake? seems like a lot of padding
|
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((actor->iwork[11] != 0) && (actor->obj.status == OBJ_ACTIVE)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
temp1 = 652.5f * 0.001f; // 0.65250003f;
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->iwork[11] >= 2) {
|
2023-11-22 17:56:29 +03:00
|
|
|
temp1 = 1.3050001f;
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
Math_SmoothStepToF(&actor->fwork[29], temp1, 0.3f, 5.0f, 0.0f);
|
|
|
|
sp5C = actor->fwork[29];
|
2024-01-17 18:36:58 +03:00
|
|
|
if (gGameFrameCount & 1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp5C *= 1.111f;
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -60.0f, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, sp5C, sp5C * 0.7f, sp5C, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, -actor->obj.rot.z * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, -actor->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, -actor->obj.rot.y * M_DTOR, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, -gPlayer[gPlayerNum].unk_058, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, gPlayer[gPlayerNum].unk_05C, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-14 17:41:43 +03:00
|
|
|
func_8005465C(gLevelType);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
sp5C = actor->fwork[21];
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((sp5C != 0.0f) && (gLevelType == LEVELTYPE_PLANET)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp54 = 0.0f;
|
2024-01-17 18:36:58 +03:00
|
|
|
if (gGameFrameCount & 1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp54 = 180.0f;
|
|
|
|
}
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_64_2();
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 100);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, 70.0f, -10.0f, -100.0f, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, sp5C, 1.0f, 50.0f, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -17.5f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, M_PI / 2, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_DTOR * sp54, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_102A8A0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Translate(gGfxMatrix, -70.0f, -10.0f, -100.0f, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, sp5C, 1.0f, 50.0f, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -17.5f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, M_PI / 2, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_DTOR * sp54, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_102A8A0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
f32 D_800CFCA0[] = {
|
|
|
|
1.7f, 1.8f, 2.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f,
|
|
|
|
};
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B1E8(Actor* actor, s32 levelType) {
|
2023-12-19 17:54:50 +03:00
|
|
|
f32 scale;
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((actor->iwork[11] != 0) && (actor->obj.status == OBJ_ACTIVE)) {
|
2023-12-19 17:54:50 +03:00
|
|
|
scale = 0.63f;
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->iwork[11] >= 2) {
|
|
|
|
scale = D_800CFCA0[actor->iwork[11] - 2] * 0.45f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-17 18:36:58 +03:00
|
|
|
if (gGameFrameCount & 1) {
|
2023-12-19 17:54:50 +03:00
|
|
|
scale *= 1.2f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, -actor->obj.rot.z * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, -actor->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, -actor->obj.rot.y * M_DTOR, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, -gPlayer[gPlayerNum].unk_058, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-19 17:54:50 +03:00
|
|
|
func_8005465C(levelType);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B388(Actor* actor) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp3C = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp30;
|
|
|
|
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp3C, &sp30);
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((((fabsf(sp30.z) < 3000.0f) && (fabsf(sp30.x) < 3000.0f) && (gBossActive == 0)) ||
|
2023-12-24 22:28:35 +03:00
|
|
|
(gPlayer[0].state_1C8 == PLAYERSTATE_1C8_0) || (gCurrentLevel == LEVEL_VENOM_ANDROSS) ||
|
|
|
|
(gCurrentLevel == LEVEL_VENOM_2) || (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7)) &&
|
2023-12-14 17:41:43 +03:00
|
|
|
(gCurrentLevel != LEVEL_MACBETH) && (gCurrentLevel != LEVEL_TITANIA)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->obj.id == OBJ_ACTOR_195) {
|
2023-12-24 22:28:35 +03:00
|
|
|
if (((gCurrentLevel == LEVEL_VENOM_2) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7) &&
|
2024-01-14 01:45:37 +03:00
|
|
|
(actor->index == 10)) ||
|
2023-12-24 22:28:35 +03:00
|
|
|
((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7) && (gPlayer[0].unk_1D0 >= 100) &&
|
2024-01-14 01:45:37 +03:00
|
|
|
(gCurrentLevel == LEVEL_KATINA) && (actor->index == 1)) ||
|
2023-12-24 22:28:35 +03:00
|
|
|
((gCurrentLevel == LEVEL_SECTOR_Y) && (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_0) &&
|
2024-01-24 17:45:55 +03:00
|
|
|
(actor->state == 5))) {
|
2023-12-14 17:41:43 +03:00
|
|
|
D_80161630.rightState = gPlayer[0].wings.rightState;
|
|
|
|
D_80161630.leftState = gPlayer[0].wings.leftState;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-20 22:32:50 +03:00
|
|
|
D_80161630.rightState = D_80161630.leftState = WINGSTATE_INTACT;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
} else {
|
2023-12-20 22:32:50 +03:00
|
|
|
D_80161630.rightState = D_80161630.leftState = WINGSTATE_INTACT;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
D_80161630.unk_04 = actor->fwork[15];
|
|
|
|
D_80161630.unk_0C = actor->fwork[16];
|
|
|
|
D_80161630.unk_08 = actor->fwork[26];
|
|
|
|
D_80161630.unk_10 = actor->fwork[27];
|
2023-11-22 17:56:29 +03:00
|
|
|
D_80161630.unk_14 = D_80161630.unk_18 = D_80161630.unk_1C = D_80161630.unk_20 = D_80161630.unk_38 =
|
|
|
|
D_80161630.unk_24 = 0.0f;
|
2024-01-14 01:45:37 +03:00
|
|
|
D_80161630.unk_28 = actor->fwork[17];
|
|
|
|
D_80161630.unk_2C = actor->iwork[14];
|
|
|
|
D_80161630.unk_30 = actor->fwork[20];
|
|
|
|
D_80161630.unk_34 = actor->fwork[19];
|
2023-12-19 17:54:50 +03:00
|
|
|
if (gLevelType == LEVELTYPE_SPACE) {
|
2023-11-22 17:56:29 +03:00
|
|
|
D_80161630.unk_04 = D_80161630.unk_08 = D_80161630.unk_0C = D_80161630.unk_10 = 0.0f;
|
|
|
|
}
|
2023-11-28 19:38:25 +03:00
|
|
|
func_80053658(&D_80161630);
|
2023-12-24 22:28:35 +03:00
|
|
|
} else if (gLevelType == LEVELTYPE_PLANET) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_40018A0);
|
2023-12-14 17:41:43 +03:00
|
|
|
} else if (gPlayer[0].unk_204 == 2) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_4003BD0);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_4007870);
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005ADAC(actor);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B6A4(Actor* actor) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 1.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6024B60);
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B71C(Actor* actor) {
|
|
|
|
RCP_SetupDL_29(actor->unk_046, gFogGreen, gFogBlue, gFogAlpha, actor->unk_048, gFogFar);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 0.5f, 0.5f, 0.5f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6018C00);
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B7CC(Actor* actor) {
|
|
|
|
RCP_SetupDL_29(actor->unk_046, gFogGreen, gFogBlue, gFogAlpha, actor->unk_048, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6022920);
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B848(Actor* actor) {
|
2023-12-19 17:54:50 +03:00
|
|
|
f32 scale;
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
switch (actor->unk_0B4) {
|
2023-11-22 17:56:29 +03:00
|
|
|
case 0:
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1028230);
|
|
|
|
break;
|
|
|
|
case 1:
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_AREA_6) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_400B390);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_4007AF0);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2023-12-19 17:54:50 +03:00
|
|
|
scale = 2.0f;
|
2024-01-17 18:36:58 +03:00
|
|
|
if (gGameFrameCount & 1) {
|
2023-12-19 17:54:50 +03:00
|
|
|
scale = 1.7f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -60.0f, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->iwork[11] = 1;
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, scale, scale, scale, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005B1E8(actor, 2);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005B9A4(Actor* actor) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, -124.0f, 0.0f, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Animation_GetFrameData(&D_6029528, actor->unk_0B6, actor->vwork);
|
|
|
|
Animation_DrawSkeleton(1, D_6029674, actor->vwork, NULL, NULL, actor, &gIdentityMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005BA30(Actor* actor) {
|
|
|
|
if (actor->timer_0BC != 0) {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_27();
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
|
|
|
|
}
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6020B40);
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8005BAAC(void) {
|
|
|
|
}
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
f32 D_800CFCCC[] = {
|
|
|
|
0.0f, 0.05f, 0.03f, 0.02f, 0.01f, 0.05f, 0.0f, 0.02f,
|
|
|
|
};
|
|
|
|
|
2024-01-03 00:33:26 +03:00
|
|
|
void func_8005BAB4(ObjectId objId, s32 index) {
|
2023-11-22 17:56:29 +03:00
|
|
|
f32 temp_fv0;
|
|
|
|
f32 temp1;
|
|
|
|
f32 temp2;
|
|
|
|
|
2023-12-14 17:41:43 +03:00
|
|
|
switch (objId) {
|
2024-01-13 16:43:04 +03:00
|
|
|
case OBJ_EFFECT_374:
|
2024-01-24 17:45:55 +03:00
|
|
|
if (gEffects[index].state == 0) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.2f, 0.0f, 1.2f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_102A8A0);
|
|
|
|
}
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_195:
|
|
|
|
case OBJ_ACTOR_198:
|
|
|
|
case OBJ_ACTOR_200:
|
|
|
|
switch (gActors[index].unk_0B4) {
|
2023-12-14 17:41:43 +03:00
|
|
|
case 3:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 2.3f, 0.0f, 2.3f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_102A010);
|
|
|
|
break;
|
2023-12-14 17:41:43 +03:00
|
|
|
case 81:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x30);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 0, 0, 0, 255);
|
2024-01-14 01:45:37 +03:00
|
|
|
temp_fv0 = gActors[index].fwork[15] * 3.0f;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, temp_fv0, temp_fv0, temp_fv0, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, -M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
|
|
|
default:
|
2024-01-17 18:36:58 +03:00
|
|
|
temp1 = D_800CFCCC[gGameFrameCount % 8U];
|
|
|
|
temp2 = D_800CFCCC[(gGameFrameCount + 4) % 8U];
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.4f + temp1, 0.0f, 1.4f + temp2, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, M_PI, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 30.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1032780);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_292:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_316:
|
2023-12-24 22:28:35 +03:00
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_0) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 200);
|
|
|
|
}
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, M_PI / 2, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(150.0f);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_102A8A0);
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_293:
|
|
|
|
case OBJ_BOSS_294:
|
|
|
|
case OBJ_BOSS_295:
|
|
|
|
case OBJ_BOSS_296:
|
2024-01-29 00:27:23 +03:00
|
|
|
COS_DEG(gBosses[index].obj.rot.z);
|
2023-11-22 17:56:29 +03:00
|
|
|
if (D_80161A88 == 2) {
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 90);
|
|
|
|
} else {
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 150);
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
switch (objId) {
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_293:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6036840);
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_294:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6036CD0);
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_295:
|
|
|
|
case OBJ_BOSS_296:
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_60363B0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_192:
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 150);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 0.4f, 0.4f, gActors[index].scale, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6034B90);
|
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_230:
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_48();
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x45);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 0, 0, 0, 0);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, gActors[index].fwork[0], 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, gActors[index].fwork[2], 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, gActors[index].scale, 1.0f, gActors[index].scale, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, -M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_229:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x44);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 0, 0, 0, 0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 120.0f, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, gActors[index].fwork[1] * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, gActors[index].fwork[2] * M_DTOR, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, gActors[index].obj.rot.y * M_DTOR, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 6.0f, 1.0f, 7.5f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, -M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_231:
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x45);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 0, 0, 0, 0);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, gActors[index].fwork[1], 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, gActors[index].fwork[2], 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 0.0f, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.2f, 1.0f, 1.2f, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, -M_PI / 2, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_215:
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_48();
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 255);
|
|
|
|
gDPSetEnvColor(gMasterDisp++, 0, 0, 0, 255);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 4.0f, 4.0f, 4.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1024AC0);
|
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_319:
|
2024-01-14 07:30:21 +03:00
|
|
|
func_i1_80198310(&gBosses[index]);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005C5F0(Item* item) {
|
2023-11-22 17:56:29 +03:00
|
|
|
s32 i;
|
|
|
|
|
2024-01-24 17:45:55 +03:00
|
|
|
if ((gGameFrameCount & 0x18) && (item->state == 0)) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 3.2f, 3.2f, 3.2f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gDPSetTextureFilter(gMasterDisp++, G_TF_POINT);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1023C80);
|
|
|
|
gDPSetTextureFilter(gMasterDisp++, G_TF_BILERP);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 2000, 2000, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
2023-12-20 22:32:50 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, item->unk_58 * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
|
|
|
|
for (i = 0; i < 8; i++) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, i * 45.0f * M_DTOR, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 2.0f * item->scale, 0.0f, 0.0f, 1);
|
2024-01-17 18:36:58 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, (gGameFrameCount + (i * 110.0f)) * M_DTOR * 7.2f * item->unk_54, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(2.0f * item->unk_50);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_101CAE0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005C900(Item* item) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 3000, 0, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_101A570);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005C9C0(Item* item) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 3000, 0, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_1019CA0);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005CA80(Item* item) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 1900, 1700, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_1016870);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005CB44(Item* item) {
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_AQUAS) {
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_3005980);
|
|
|
|
} else {
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale * 0.1f);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 2000, 2000, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_10231A0);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1B);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1022E80);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005CC9C(Item* item) {
|
2023-12-24 22:28:35 +03:00
|
|
|
Graphics_SetScaleMtx(item->scale * 0.1f);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPTexture(gMasterDisp++, 2000, 2000, 0, G_TX_RENDERTILE, G_ON);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1019820);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_TEXTURE_GEN);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1B);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_101A8E0);
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void func_8005CDA8(Item* item) {
|
2023-11-22 17:56:29 +03:00
|
|
|
s32 i;
|
|
|
|
|
2023-12-24 22:28:35 +03:00
|
|
|
item->obj.rot.y = (Math_Atan2F(gPlayer[gPlayerNum].camEye.x - item->obj.pos.x,
|
|
|
|
gPlayer[gPlayerNum].camEye.z - (item->obj.pos.z + D_80177D20)) *
|
2023-12-20 22:32:50 +03:00
|
|
|
180.0f) /
|
|
|
|
M_PI;
|
2024-01-24 17:45:55 +03:00
|
|
|
if (item->state != 0) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x29);
|
2023-12-20 22:32:50 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, item->unk_44);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-22 06:28:02 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK | G_LIGHTING);
|
2023-11-22 17:56:29 +03:00
|
|
|
for (i = 0; i < 7; i++) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, (i * 360.0f / 7.0f) * M_DTOR, 1);
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, item->scale, 0.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_102FE80);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK | G_LIGHTING);
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_8005D008(Object* obj, s32 drawType) {
|
|
|
|
if (drawType == 2) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_80177D20, 1);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gCalcMatrix, obj->pos.x, obj->pos.y, obj->pos.z, 0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
|
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gCalcMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, obj->pos.y, obj->pos.z + D_80177D20, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_8005D1F0(Object* obj, s32 drawType) {
|
|
|
|
if (drawType == 2) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_80177D20, 1);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gCalcMatrix, obj->pos.x, obj->pos.y, obj->pos.z, 0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
|
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gCalcMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, obj->pos.y, obj->pos.z + D_80177D20, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_8005D3CC(Object* obj, f32 xRot, f32 yRot, f32 zRot, s32 drawType) {
|
|
|
|
if (drawType == 2) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_80177D20, 1);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gCalcMatrix, obj->pos.x, obj->pos.y, obj->pos.z, 0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
|
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, M_DTOR * yRot, 1);
|
|
|
|
Matrix_RotateX(gCalcMatrix, M_DTOR * xRot, 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, M_DTOR * zRot, 1);
|
|
|
|
Matrix_RotateY(gCalcMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gCalcMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, obj->pos.y, obj->pos.z + D_80177D20, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Copy(&D_801615F0, gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_DTOR * yRot, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, M_DTOR * xRot, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, M_DTOR * zRot, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, obj->rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void Object_80_Draw(Object_80* obj80, s32 arg1) {
|
|
|
|
obj80->obj.pos.y += D_8017847C;
|
2023-12-20 22:32:50 +03:00
|
|
|
func_8005D008(&obj80->obj, obj80->info.drawType);
|
2023-12-19 17:54:50 +03:00
|
|
|
obj80->obj.pos.y -= D_8017847C;
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj80->info.drawType == 0) {
|
|
|
|
if ((obj80->obj.id == OBJ_80_19) || (obj80->obj.id == OBJ_80_55) || (obj80->obj.id == OBJ_80_9) ||
|
|
|
|
(obj80->obj.id == OBJ_80_50)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_57(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
if (arg1 < 0) {
|
|
|
|
func_800596C0();
|
|
|
|
}
|
2023-12-20 22:32:50 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, obj80->info.dList);
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj80->obj.id == OBJ_80_8) {
|
2023-11-22 17:56:29 +03:00
|
|
|
if (arg1 < 0) {
|
|
|
|
return; // weird control flow
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
func_800597C0(arg1);
|
|
|
|
if (arg1 < 0) {
|
|
|
|
func_800596C0();
|
|
|
|
}
|
2023-12-20 22:32:50 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, obj80->info.dList);
|
|
|
|
if (obj80->obj.id == OBJ_80_8) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2023-12-20 22:32:50 +03:00
|
|
|
} else if (obj80->info.draw != NULL) {
|
2023-11-22 17:56:29 +03:00
|
|
|
func_800597C0(arg1);
|
2023-12-20 22:32:50 +03:00
|
|
|
obj80->info.draw(&obj80->obj);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void Object_4C_Draw(Object_4C* obj4C, s32 arg1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
if (arg1 >= 0) {
|
2023-12-19 17:54:50 +03:00
|
|
|
obj4C->obj.pos.y += D_8017847C;
|
|
|
|
func_8005D008(&obj4C->obj, 0);
|
|
|
|
obj4C->obj.pos.y -= D_8017847C;
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj4C->info.drawType == 0) {
|
|
|
|
gSPDisplayList(gMasterDisp++, obj4C->info.dList);
|
|
|
|
} else if (obj4C->info.draw != NULL) {
|
|
|
|
obj4C->info.draw(&obj4C->obj);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void Actor_Draw2(Actor* actor) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp34 = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->info.draw != NULL) {
|
|
|
|
switch (actor->obj.id) {
|
|
|
|
case OBJ_ACTOR_194:
|
|
|
|
func_8006B74C(actor);
|
2023-11-22 17:56:29 +03:00
|
|
|
return;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_236:
|
2024-01-14 04:09:13 +03:00
|
|
|
func_i3_80190F08(actor);
|
2023-11-22 17:56:29 +03:00
|
|
|
return;
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->obj.id == OBJ_ACTOR_200) && (actor->unk_0B4 == 200)) {
|
|
|
|
func_8006B74C(actor);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->info.unk_19 != 0) {
|
|
|
|
actor->obj.pos.y += D_8017847C;
|
|
|
|
func_8005D008(&actor->obj, actor->info.drawType);
|
|
|
|
actor->obj.pos.y -= D_8017847C;
|
|
|
|
} else if ((actor->obj.id == OBJ_ACTOR_200) && (actor->unk_0B4 != 31)) {
|
|
|
|
func_8005D3CC(&actor->obj, actor->vwork[29].x, actor->vwork[29].y,
|
|
|
|
actor->vwork[29].z + actor->unk_0F4.z, actor->info.drawType);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005D008(&actor->obj, actor->info.drawType);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->info.drawType == 0) {
|
|
|
|
gSPDisplayList(gMasterDisp++, actor->info.dList);
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F1EC(actor->sfxPos);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->info.draw(&actor->obj);
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F1EC(actor->sfxPos);
|
2024-01-14 01:45:37 +03:00
|
|
|
if (((actor->obj.id == OBJ_ACTOR_198) || ((actor->obj.id == OBJ_ACTOR_203) && (actor->unk_0B6 > 0))) &&
|
2023-12-14 17:41:43 +03:00
|
|
|
(D_80161410 > 0)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp34, &D_80177E98[actor->unk_0E4]);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->timer_0CA[0] != 0) && (D_80161410 > 0)) {
|
|
|
|
sp34.y += actor->info.unk_1C;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp34, &D_80161578[0]);
|
2023-11-22 17:56:29 +03:00
|
|
|
if (D_80161578[0].z > -200.0f) {
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->timer_0CA[0] = 0;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void Actor_Draw1(Actor* actor) {
|
2023-11-22 17:56:29 +03:00
|
|
|
s32 var_v1;
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp50 = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
f32 var_fa1;
|
|
|
|
f32 var_ft5;
|
|
|
|
f32 var_fv0;
|
|
|
|
f32 var_fv1;
|
|
|
|
|
|
|
|
D_801615EC = 0;
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->info.drawType == 2) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, D_80177D20, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_Translate(gCalcMatrix, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Mult(gGfxMatrix, gCalcMatrix, 1);
|
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp50, &D_801615E0);
|
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fv0 = 0.0f;
|
|
|
|
var_fv1 = -12000.0f;
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->obj.id == OBJ_ACTOR_197) && (actor->unk_0E4 >= 100)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fv0 = 1000.0f;
|
|
|
|
var_fv1 = -25000.0f;
|
|
|
|
}
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((var_fv0 > D_801615E0.z) && (D_801615E0.z > var_fv1)) {
|
|
|
|
if (fabsf(D_801615E0.x) < (fabsf(D_801615E0.z * 0.5f) + 500.0f)) {
|
|
|
|
if (fabsf(D_801615E0.y) < (fabsf(D_801615E0.z * 0.5f) + 500.0f)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, actor->obj.rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gCalcMatrix, actor->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gCalcMatrix, actor->obj.rot.z * M_DTOR, 1);
|
|
|
|
actor->info.draw(&actor->obj);
|
2023-12-14 20:58:53 +03:00
|
|
|
D_801615EC = 1;
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) && (actor->obj.id == OBJ_ACTOR_197) &&
|
|
|
|
(actor->unk_0E4 == 200)) {
|
2023-12-14 20:58:53 +03:00
|
|
|
D_80177E98[0] = D_801615E0;
|
|
|
|
}
|
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, actor->obj.pos.x, actor->obj.pos.y, actor->obj.pos.z, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp50, &D_801615E0);
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) || (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_0) ||
|
2024-01-14 01:45:37 +03:00
|
|
|
((actor->obj.id == OBJ_ACTOR_197) && (actor->unk_0E4 >= 100)) ||
|
|
|
|
((actor->obj.id == OBJ_ACTOR_195) && (actor->info.bonus != 0))) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_ft5 = var_fv0 = 3000.0f;
|
|
|
|
var_fv1 = -29000.0f;
|
|
|
|
var_fa1 = 0.7f;
|
|
|
|
} else {
|
|
|
|
var_ft5 = 500.0f;
|
|
|
|
var_fv0 = 0.0f;
|
|
|
|
var_fv1 = -20000.0f;
|
|
|
|
var_fa1 = 0.5f;
|
|
|
|
}
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((var_fv0 > D_801615E0.z) && (D_801615E0.z > var_fv1)) {
|
|
|
|
if (fabsf(D_801615E0.x) < (fabsf(D_801615E0.z * var_fa1) + var_ft5)) {
|
|
|
|
if (fabsf(D_801615E0.y) < (fabsf(D_801615E0.z * var_fa1) + var_ft5)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->info.draw != NULL) {
|
|
|
|
Matrix_RotateY(gGfxMatrix, actor->obj.rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, actor->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, actor->obj.rot.z * M_DTOR, 1);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->info.draw(&actor->obj);
|
2023-12-14 20:58:53 +03:00
|
|
|
D_801615EC = 1;
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_3) &&
|
2024-01-14 01:45:37 +03:00
|
|
|
(((actor->obj.id == OBJ_ACTOR_197) &&
|
|
|
|
((actor->unk_0E4 < 4) || (actor->unk_0E4 == 8) || (actor->unk_0E4 == 9))) ||
|
|
|
|
(actor->obj.id == OBJ_ACTOR_198))) {
|
|
|
|
D_80177E98[actor->unk_0E4] = D_801615E0;
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (D_801615EC == 0) {
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->timer_0CA[gPlayerNum] = 0;
|
|
|
|
if ((actor->obj.id == OBJ_ACTOR_189) || (actor->obj.id == OBJ_ACTOR_286)) {
|
2024-01-21 23:42:06 +03:00
|
|
|
Object_Kill(&actor->obj, actor->sfxPos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
for (var_v1 = 0; var_v1 < gCamCount; var_v1++) {
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->timer_0CA[var_v1] != 0) {
|
2023-11-22 17:56:29 +03:00
|
|
|
D_80161578[var_v1] = D_801615E0;
|
2024-01-14 01:45:37 +03:00
|
|
|
D_80161578[var_v1].y += actor->info.unk_1C;
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((var_v1 == gPlayerNum) && (D_80161578[var_v1].z > -300.0f)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->timer_0CA[var_v1] = 0;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F290(actor->sfxPos, &D_801615E0);
|
2024-01-14 01:45:37 +03:00
|
|
|
actor->iwork[24] = D_801615EC;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2024-01-07 01:39:23 +03:00
|
|
|
void Boss_Draw(Boss* boss, s32 arg1) {
|
2023-11-22 17:56:29 +03:00
|
|
|
f32 var_fa1;
|
|
|
|
f32 var_ft5;
|
|
|
|
f32 var_fv0;
|
|
|
|
f32 var_fv1;
|
|
|
|
f32 sp3C;
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp30 = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2024-01-07 01:39:23 +03:00
|
|
|
if (boss->info.unk_19 != 0) {
|
|
|
|
boss->obj.pos.y += boss->unk_068 + D_8017847C;
|
|
|
|
func_8005D1F0(&boss->obj, boss->info.drawType);
|
|
|
|
boss->obj.pos.y -= boss->unk_068 + D_8017847C;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-07 01:39:23 +03:00
|
|
|
func_8005D1F0(&boss->obj, boss->info.drawType);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
Matrix_MultVec3f(&D_801615F0, &sp30, &D_801615D0);
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F290(boss->sfxPos, &D_801615D0);
|
2024-01-07 01:39:23 +03:00
|
|
|
if ((boss->obj.id == OBJ_BOSS_316) || (boss->obj.id == OBJ_BOSS_317)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fa1 = 6000.0f;
|
|
|
|
var_fv0 = 6000.0f;
|
|
|
|
var_ft5 = 0.9f;
|
|
|
|
var_fv1 = -20000.0f;
|
2024-01-07 01:39:23 +03:00
|
|
|
} else if (boss->obj.id == OBJ_BOSS_313) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fv1 = -25000.0f;
|
|
|
|
var_ft5 = 0.7f;
|
|
|
|
var_fa1 = 3000.0f;
|
|
|
|
var_fv0 = 2000.0f;
|
|
|
|
} else {
|
|
|
|
var_ft5 = 0.5f;
|
|
|
|
var_fa1 = 2000.0f;
|
|
|
|
var_fv0 = 1000.0f;
|
|
|
|
var_fv1 = -15000.0f;
|
|
|
|
}
|
|
|
|
sp3C = -1.0f;
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((D_801615D0.z < var_fv0) && (var_fv1 < D_801615D0.z)) {
|
|
|
|
if (fabsf(D_801615D0.x) < (fabsf(D_801615D0.z * var_ft5) + var_fa1)) {
|
|
|
|
if (fabsf(D_801615D0.y) < (fabsf(D_801615D0.z * var_ft5) + var_fa1)) {
|
|
|
|
sp3C = 1.0f;
|
2024-01-07 01:39:23 +03:00
|
|
|
if (boss->obj.id != OBJ_BOSS_309) {
|
|
|
|
if (boss->obj.id != OBJ_BOSS_316) {
|
|
|
|
func_8005F670(&boss->obj.pos);
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
2024-01-07 01:39:23 +03:00
|
|
|
if (boss->info.drawType != 2) {
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
}
|
|
|
|
if (arg1 < 0) {
|
|
|
|
func_800596C0();
|
|
|
|
}
|
2024-01-07 01:39:23 +03:00
|
|
|
boss->info.draw(&boss->obj);
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
D_801615D0.y = sp3C;
|
2024-01-07 01:39:23 +03:00
|
|
|
if (boss->obj.id == OBJ_BOSS_309) {
|
|
|
|
boss->vwork[30] = D_801615D0;
|
|
|
|
func_8005F670(&boss->obj.pos);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-07 01:39:23 +03:00
|
|
|
boss->info.draw(&boss->obj);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 16:43:04 +03:00
|
|
|
void Effect_Draw1(Effect* effect, s32 arg1) {
|
|
|
|
if ((arg1 < 0) && (effect->obj.pos.y < 7.0f)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
return;
|
|
|
|
}
|
2024-01-13 16:43:04 +03:00
|
|
|
if ((effect->obj.id == OBJ_EFFECT_353) || (effect->obj.id == OBJ_EFFECT_369)) {
|
|
|
|
func_8005D3CC(&effect->obj, effect->unk_60.x, effect->unk_60.y, effect->unk_60.z, 0);
|
|
|
|
} else if (effect->info.unk_14 == -1) {
|
|
|
|
effect->obj.pos.y += D_8017847C;
|
|
|
|
func_8005D008(&effect->obj, 0);
|
|
|
|
effect->obj.pos.y -= D_8017847C;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-13 16:43:04 +03:00
|
|
|
func_8005D008(&effect->obj, 0);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-13 16:43:04 +03:00
|
|
|
if (effect->info.draw != NULL) {
|
|
|
|
effect->info.draw(&effect->obj);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-13 16:43:04 +03:00
|
|
|
void Effect_Draw2(Effect* effect) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp4C = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp40;
|
|
|
|
f32 var_fv0;
|
|
|
|
u8 sp3B = 0;
|
|
|
|
|
2024-01-13 16:43:04 +03:00
|
|
|
if (effect->info.unk_14 == -1) {
|
|
|
|
Matrix_Translate(gGfxMatrix, effect->obj.pos.x, effect->obj.pos.y + D_8017847C, effect->obj.pos.z + D_80177D20,
|
|
|
|
1);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-13 16:43:04 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, effect->obj.pos.x, effect->obj.pos.y, effect->obj.pos.z + D_80177D20, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp4C, &sp40);
|
2023-12-14 17:41:43 +03:00
|
|
|
if ((gCurrentLevel == LEVEL_SECTOR_Z) || (gCurrentLevel == LEVEL_BOLSE)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fv0 = -20000.0f;
|
|
|
|
} else {
|
|
|
|
var_fv0 = -10000.0f;
|
|
|
|
}
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((sp40.z < 0.0f) && (var_fv0 < sp40.z)) {
|
|
|
|
if (fabsf(sp40.x) < (fabsf(sp40.z * 0.5f) + 500.0f)) {
|
|
|
|
if (fabsf(sp40.y) < (fabsf(sp40.z * 0.5f) + 500.0f)) {
|
2024-01-13 16:43:04 +03:00
|
|
|
if (effect->info.draw != NULL) {
|
|
|
|
Matrix_RotateY(gGfxMatrix, effect->obj.rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, effect->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, effect->obj.rot.z * M_DTOR, 1);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-13 16:43:04 +03:00
|
|
|
effect->info.draw(&effect->obj);
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
|
|
|
sp3B = 1;
|
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F290(effect->sfxPos, &sp40);
|
2024-01-13 16:43:04 +03:00
|
|
|
if ((sp3B == 0) && (effect->obj.id != OBJ_EFFECT_352) && (effect->obj.id != OBJ_EFFECT_373) && (!gVersusMode)) {
|
2024-01-21 23:42:06 +03:00
|
|
|
Object_Kill(&effect->obj, effect->sfxPos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
void Item_Draw(Item* item, s32 arg1) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp44 = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp38;
|
|
|
|
u8 var_v0;
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, item->obj.pos.x, item->obj.pos.y, item->obj.pos.z + D_80177D20, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp44, &sp38);
|
2023-11-22 17:56:29 +03:00
|
|
|
var_v0 = 0;
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((sp38.z < 0.0f) && (sp38.z > -12000.0f)) {
|
|
|
|
if (fabsf(sp38.x) < (fabsf(sp38.z * 0.5f) + 500.0f)) {
|
|
|
|
if (fabsf(sp38.y) < (fabsf(sp38.z * 0.5f) + 500.0f)) {
|
2023-12-20 22:32:50 +03:00
|
|
|
if (item->info.draw != NULL) {
|
|
|
|
Matrix_RotateY(gGfxMatrix, item->obj.rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, item->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, item->obj.rot.z * M_DTOR, 1);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-20 22:32:50 +03:00
|
|
|
if (item->info.drawType == 0) {
|
|
|
|
gSPDisplayList(gMasterDisp++, item->info.dList);
|
2023-12-14 20:58:53 +03:00
|
|
|
} else {
|
2023-12-20 22:32:50 +03:00
|
|
|
item->info.draw(&item->obj);
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
var_v0 = 1;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F290(item->sfxPos, &sp38);
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((var_v0 == 0) && (gLevelMode == LEVELMODE_ALL_RANGE) && (gCamCount == 1) && (item->obj.id < 336) &&
|
|
|
|
(gCurrentLevel != LEVEL_VENOM_ANDROSS)) {
|
2024-01-21 23:42:06 +03:00
|
|
|
Object_Kill(&item->obj, item->sfxPos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 01:45:37 +03:00
|
|
|
void func_8005EA24(Actor* actor) {
|
|
|
|
Matrix_Translate(gGfxMatrix, actor->obj.pos.x, actor->fwork[25] + 3.0f, actor->obj.pos.z, 1);
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_FORTUNA) {
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, actor->fwork[27], 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, actor->fwork[26], 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, actor->fwork[28], 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, -actor->fwork[27], 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
}
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.4f, 0.0f, 1.4f, 1);
|
2024-01-14 01:45:37 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, (actor->obj.rot.y + 180.0f) * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, actor->obj.rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->unk_0E4 < 4) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, 30.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_1032780);
|
2023-12-14 17:41:43 +03:00
|
|
|
} else if (gCurrentLevel == LEVEL_KATINA) {
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->unk_0B6 == 1) || (actor->unk_0B6 == 2)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_600D730);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_600DBC0);
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
} else if ((actor->unk_0E4 < 8) || (gCurrentLevel != LEVEL_FORTUNA)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_F014310);
|
2023-12-14 17:41:43 +03:00
|
|
|
} else if (gCurrentLevel == LEVEL_FORTUNA) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6009F90);
|
|
|
|
} else {
|
|
|
|
gSPDisplayList(gMasterDisp++, D_F014310);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void func_8005ECD8(s32 index, Object* obj) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x42);
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, 180);
|
2024-01-14 01:45:37 +03:00
|
|
|
if (obj->id == OBJ_ACTOR_197) {
|
|
|
|
func_8005EA24(&gActors[index]);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
switch (obj->id) {
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_230:
|
2024-01-14 04:09:13 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, gGroundLevel + 2.0f + gActors[index].fwork[1],
|
2023-12-19 17:54:50 +03:00
|
|
|
obj->pos.z + D_80177D20, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2024-01-14 01:45:37 +03:00
|
|
|
case OBJ_ACTOR_229:
|
|
|
|
case OBJ_ACTOR_231:
|
2024-01-14 04:09:13 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, gGroundLevel + 2.0f + gActors[index].fwork[0],
|
2023-12-19 17:54:50 +03:00
|
|
|
obj->pos.z + D_80177D20, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
2024-01-07 01:39:23 +03:00
|
|
|
case OBJ_BOSS_316:
|
2024-01-14 04:09:13 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, gGroundLevel + 2.0f + D_8017847C, obj->pos.z, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
|
|
|
default:
|
2024-01-14 04:09:13 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj->pos.x, gGroundLevel + 2.0f, obj->pos.z + D_80177D20, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
break;
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((D_801784AC != 4) || (obj->id == OBJ_ACTOR_200) || (obj->id == OBJ_ACTOR_195) ||
|
|
|
|
(obj->id == OBJ_ACTOR_198)) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 0.0f, 1.0f, 1);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, obj->rot.y * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((obj->id < OBJ_BOSS_292) && (obj->id != OBJ_ACTOR_230) && (obj->id != OBJ_ACTOR_229) &&
|
|
|
|
(obj->id != OBJ_ACTOR_231)) {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateX(gGfxMatrix, obj->rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, obj->rot.z * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-19 17:54:50 +03:00
|
|
|
func_8005BAB4(obj->id, index);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
void func_8005F030(f32* sfxSrc) {
|
|
|
|
if (sfxSrc[0] > 5000.0f) {
|
|
|
|
sfxSrc[0] = 5000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
if (sfxSrc[0] < -5000.0f) {
|
|
|
|
sfxSrc[0] = -5000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
if (sfxSrc[1] > 2000.0f) {
|
|
|
|
sfxSrc[1] = 2000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
if (sfxSrc[1] < -2000.0f) {
|
|
|
|
sfxSrc[1] = -2000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
if (sfxSrc[2] > 5000.0f) {
|
|
|
|
sfxSrc[2] = 5000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
if (sfxSrc[2] < -5000.0f) {
|
|
|
|
sfxSrc[2] = -5000.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
void func_8005F0E8(f32* sfxSrc, Vec3f* pos) {
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp2C;
|
|
|
|
Vec3f sp20;
|
|
|
|
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCamCount != 1) {
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = sfxSrc[1] = sfxSrc[2] = 0.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-14 17:41:43 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, gPlayer[0].unk_058, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, gPlayer[0].unk_05C, 1);
|
2024-01-21 23:42:06 +03:00
|
|
|
sp2C.x = pos->x - D_801779D8.x;
|
|
|
|
sp2C.y = pos->y - D_801779D8.y;
|
|
|
|
sp2C.z = pos->z + D_80177D20 - D_801779D8.z;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gCalcMatrix, &sp2C, &sp20);
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = sp20.x;
|
|
|
|
sfxSrc[1] = sp20.y;
|
|
|
|
sfxSrc[2] = sp20.z;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F030(sfxSrc);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-22 06:28:02 +03:00
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
void func_8005F1EC(f32* sfxSrc) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp2C = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp20;
|
|
|
|
s32 pad;
|
|
|
|
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCamCount != 1) {
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = sfxSrc[1] = sfxSrc[2] = 0.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
|
|
|
Matrix_MultVec3f(&D_801615F0, &sp2C, &sp20);
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = sp20.x;
|
|
|
|
sfxSrc[1] = sp20.y;
|
|
|
|
sfxSrc[2] = sp20.z;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F030(sfxSrc);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2024-01-21 23:42:06 +03:00
|
|
|
void func_8005F290(f32* sfxSrc, Vec3f* pos) {
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCamCount != 1) {
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = sfxSrc[1] = sfxSrc[2] = 0.0f;
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2024-01-21 23:42:06 +03:00
|
|
|
sfxSrc[0] = pos->x;
|
|
|
|
sfxSrc[1] = pos->y;
|
|
|
|
sfxSrc[2] = pos->z;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F030(sfxSrc);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void Object_58_Draw(Object_58* obj58) {
|
2023-11-27 00:27:05 +03:00
|
|
|
Vec3f sp54 = { 0.0f, 0.0f, 0.0f };
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp48;
|
|
|
|
f32 sp44 = 1000.0f;
|
|
|
|
f32 sp40 = -12000.0f;
|
|
|
|
f32 sp3C = 2000.0f;
|
|
|
|
f32 sp38 = 0.5f;
|
|
|
|
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj58->obj.id == OBJ_80_156) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp44 = 4000.0f;
|
|
|
|
sp40 = -13000.0f;
|
|
|
|
sp3C = 4500.0f;
|
2023-12-24 22:28:35 +03:00
|
|
|
} else if (gCurrentLevel == LEVEL_VENOM_ANDROSS) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp40 = -20000.0f;
|
|
|
|
sp38 = 0.4f;
|
2023-12-20 22:32:50 +03:00
|
|
|
} else if (obj58->obj.id == OBJ_80_143) {
|
2023-11-22 17:56:29 +03:00
|
|
|
sp44 = 6000.0f;
|
|
|
|
sp40 = -20000.0f;
|
|
|
|
sp3C = 6000.0f;
|
|
|
|
sp38 = 0.9f;
|
|
|
|
}
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gLevelType == LEVELTYPE_PLANET) || (gCurrentLevel == LEVEL_BOLSE)) {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj58->obj.pos.x, obj58->obj.pos.y + D_8017847C, obj58->obj.pos.z, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, obj58->obj.pos.x, obj58->obj.pos.y, obj58->obj.pos.z, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3f(gGfxMatrix, &sp54, &sp48);
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((sp48.z < sp44) && (sp40 < sp48.z)) {
|
|
|
|
if (fabsf(sp48.y) < (fabsf(sp48.z * sp38) + sp3C)) {
|
|
|
|
if (fabsf(sp48.x) < (fabsf(sp48.z * sp38) + sp3C)) {
|
2023-12-19 17:54:50 +03:00
|
|
|
func_8005F670(&obj58->obj.pos);
|
2023-12-20 22:32:50 +03:00
|
|
|
if (obj58->obj.id == OBJ_80_131) {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, obj58->obj.rot.y * M_DTOR, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, obj58->obj.rot.x * M_DTOR, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, obj58->obj.rot.z * M_DTOR, 1);
|
2024-01-29 00:27:23 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, M_PI / 2, 1);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, -551.0f, 0.0f, 0.0f, 1);
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_6007650);
|
|
|
|
} else {
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_RotateY(gGfxMatrix, obj58->obj.rot.y * M_DTOR, 1);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-20 22:32:50 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, obj58->info.dList);
|
2023-12-14 20:58:53 +03:00
|
|
|
}
|
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8005F670(Vec3f* arg0) {
|
|
|
|
Vec3f sp9C;
|
|
|
|
f32 sp98;
|
|
|
|
f32 sp94;
|
|
|
|
f32 temp_fv0;
|
|
|
|
Vec3f sp84;
|
|
|
|
f32 temp1;
|
|
|
|
f32 temp2;
|
|
|
|
f32 var_fs0;
|
|
|
|
Vec3f sp6C;
|
|
|
|
f32 temp3;
|
|
|
|
f32 pad;
|
|
|
|
|
|
|
|
if (D_8017836C > 0.01f) {
|
|
|
|
sp9C.x = arg0->x - D_80178370;
|
|
|
|
sp9C.y = arg0->y - D_80178374;
|
|
|
|
sp9C.z = arg0->z - D_80178378;
|
|
|
|
temp_fv0 = sqrtf(VEC3F_SQ(sp9C));
|
2023-12-24 22:28:35 +03:00
|
|
|
if (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) {
|
2023-11-22 17:56:29 +03:00
|
|
|
var_fs0 = 700.0f / temp_fv0;
|
|
|
|
} else {
|
|
|
|
var_fs0 = 200.0f / temp_fv0;
|
|
|
|
}
|
|
|
|
if (var_fs0 > 1.0f) {
|
|
|
|
var_fs0 = 1.0f;
|
|
|
|
}
|
|
|
|
if (D_8017812C == 2) {
|
|
|
|
var_fs0 = 1.0f;
|
|
|
|
}
|
|
|
|
sp94 = Math_Atan2F(sp9C.x, sp9C.z);
|
|
|
|
sp98 = -Math_Atan2F(sp9C.y, sqrtf(SQ(sp9C.x) + SQ(sp9C.z)));
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gCalcMatrix);
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_RotateZ(gCalcMatrix, gPlayer[gPlayerNum].unk_034 * D_80177950 * M_DTOR, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, -gPlayer[gPlayerNum].unk_05C, 1);
|
|
|
|
Matrix_RotateY(gCalcMatrix, gPlayer[gPlayerNum].unk_058 + sp94, 1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_RotateX(gCalcMatrix, sp98, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
sp6C.x = 0.0f;
|
|
|
|
sp6C.y = 0.0f;
|
|
|
|
sp6C.z = -100.0f;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp6C, &sp84);
|
|
|
|
Matrix_Pop(&gCalcMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
temp1 = D_80178360 * D_8017836C * var_fs0;
|
|
|
|
temp2 = D_80178364 * D_8017836C * var_fs0;
|
|
|
|
temp3 = D_80178368 * D_8017836C * var_fs0;
|
2023-12-14 17:41:43 +03:00
|
|
|
Lights_SetTwoLights(&gMasterDisp, gLight1x, gLight1y, gLight1z, sp84.x, sp84.y, sp84.z, gLight1R, gLight1G,
|
|
|
|
gLight1B, temp1, temp2, temp3, gAmbientR, gAmbientG, gAmbientB);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-04 21:50:52 +03:00
|
|
|
bool func_8005F9DC(Vec3f* arg0) {
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f sp2C;
|
|
|
|
Vec3f sp20;
|
|
|
|
|
2023-12-24 22:28:35 +03:00
|
|
|
Matrix_RotateY(gCalcMatrix, gPlayer[gPlayerNum].unk_058, 0);
|
|
|
|
Matrix_RotateX(gCalcMatrix, gPlayer[gPlayerNum].unk_05C, 1);
|
|
|
|
sp2C.x = arg0->x - gPlayer[gPlayerNum].camEye.x;
|
|
|
|
sp2C.y = arg0->y - gPlayer[gPlayerNum].camEye.y;
|
|
|
|
sp2C.z = arg0->z - gPlayer[gPlayerNum].camEye.z;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp2C, &sp20);
|
2023-12-14 20:58:53 +03:00
|
|
|
if ((sp20.z < 1000.0f) && (sp20.z > -13000.0f)) {
|
|
|
|
if (fabsf(sp20.x) < (fabsf(sp20.z * 0.4f) + 2000.0f)) {
|
|
|
|
if (fabsf(sp20.y) < (fabsf(sp20.y * 0.4f) + 2000.0f)) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-04 21:50:52 +03:00
|
|
|
return false;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
void Object_DrawAll(s32 arg0) {
|
2023-11-22 17:56:29 +03:00
|
|
|
Vec3f spAC;
|
|
|
|
s32 i;
|
|
|
|
s32 pad[5]; // probably separate iterators for each loop
|
2024-01-14 01:45:37 +03:00
|
|
|
Actor* actor;
|
2024-01-07 01:39:23 +03:00
|
|
|
Boss* boss;
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_4C* obj4C;
|
|
|
|
Object_58* obj58;
|
2023-12-20 22:32:50 +03:00
|
|
|
Item* item;
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_80* obj80;
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gLevelMode == LEVELMODE_ALL_RANGE) && (gCurrentLevel != LEVEL_KATINA)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
if (D_80177AB0 == 5) {
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
}
|
2023-12-19 17:54:50 +03:00
|
|
|
for (i = 0, obj58 = gObjects58; i < 200; i++, obj58++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((obj58->obj.status == OBJ_ACTIVE) && (obj58->obj.id != OBJ_80_147)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_BOLSE) {
|
2024-01-21 23:42:06 +03:00
|
|
|
spAC.x = obj58->sfxPos[0];
|
|
|
|
spAC.y = obj58->sfxPos[1];
|
|
|
|
spAC.z = obj58->sfxPos[2];
|
2024-01-14 07:30:21 +03:00
|
|
|
Matrix_MultVec3fNoTranslate(&D_i4_8019EE80, &spAC, &obj58->obj.pos);
|
2024-01-07 01:39:23 +03:00
|
|
|
obj58->obj.rot.y = gBosses[0].obj.rot.y + (*obj58).unk_54;
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_58_Draw(obj58);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-12-19 17:54:50 +03:00
|
|
|
for (i = 0, obj80 = gObjects80; i < ARRAY_COUNT(gObjects80); i++, obj80++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if (obj80->obj.status >= OBJ_ACTIVE) {
|
2023-11-22 17:56:29 +03:00
|
|
|
if (arg0 > 0) {
|
2023-12-19 17:54:50 +03:00
|
|
|
func_8005F670(&obj80->obj.pos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_80_Draw(obj80, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F1EC(obj80->sfxPos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-07 01:39:23 +03:00
|
|
|
for (i = 0, boss = gBosses; i < ARRAY_COUNT(gBosses); i++, boss++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((boss->obj.status >= OBJ_ACTIVE) && (boss->obj.id != OBJ_BOSS_310)) {
|
2024-01-07 01:39:23 +03:00
|
|
|
if (!(boss->timer_05C & 1)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_27();
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 64, 64, 255, 255);
|
|
|
|
}
|
|
|
|
func_800597C0(arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-07 01:39:23 +03:00
|
|
|
Boss_Draw(boss, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2024-01-07 01:39:23 +03:00
|
|
|
if ((boss->unk_05E != 0) && (D_801615D0.y > 0.0f)) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-07 01:39:23 +03:00
|
|
|
func_8005ECD8(i, &boss->obj);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR, gAmbientG,
|
|
|
|
gAmbientB);
|
2023-12-19 17:54:50 +03:00
|
|
|
for (i = 0, obj4C = gObjects4C; i < ARRAY_COUNT(gObjects4C); i++, obj4C++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((obj4C->obj.status >= OBJ_ACTIVE) && func_80060FE4(&obj4C->obj.pos, -12000.0f)) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-20 22:32:50 +03:00
|
|
|
if ((obj4C->obj.id == OBJ_4C_165) || (obj4C->obj.id == OBJ_4C_166)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_57(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_60(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_4C_Draw(obj4C, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2024-01-14 01:45:37 +03:00
|
|
|
for (i = 0, actor = gActors; i < ARRAY_COUNT(gActors); i++, actor++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if (actor->obj.status >= OBJ_ACTIVE) {
|
2024-01-14 01:45:37 +03:00
|
|
|
if (!(actor->timer_0C6 & 1)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_UNK_15) {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_23();
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
} else {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_27();
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->scale >= 0.0f) {
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 0, 0, 255);
|
|
|
|
} else {
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 64, 64, 255, 255);
|
|
|
|
}
|
|
|
|
}
|
2023-12-24 22:28:35 +03:00
|
|
|
switch (gLevelMode) {
|
|
|
|
case LEVELMODE_ON_RAILS:
|
|
|
|
case LEVELMODE_UNK_2:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gPlayer[0].state_1C8 == PLAYERSTATE_1C8_2) || (gPlayer[0].state_1C8 == PLAYERSTATE_1C8_7) ||
|
|
|
|
(gCurrentLevel == LEVEL_AQUAS)) {
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005F670(&actor->obj.pos);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
func_800597C0(arg0);
|
2024-01-14 01:45:37 +03:00
|
|
|
Actor_Draw2(actor);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2024-01-14 01:45:37 +03:00
|
|
|
if (actor->unk_0C9 != 0) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005ECD8(i, &actor->obj);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
break;
|
2023-12-24 22:28:35 +03:00
|
|
|
case LEVELMODE_ALL_RANGE:
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-14 01:45:37 +03:00
|
|
|
Actor_Draw1(actor);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2024-01-14 01:45:37 +03:00
|
|
|
if ((actor->unk_0C9 != 0) && (D_801615EC != 0) &&
|
2023-12-14 17:41:43 +03:00
|
|
|
((D_801615E0.z > -4000.0f) || (gCurrentLevel != LEVEL_KATINA))) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-14 01:45:37 +03:00
|
|
|
func_8005ECD8(i, &actor->obj);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
gDPSetFogColor(gMasterDisp++, gFogRed, gFogGreen, gFogBlue, gFogAlpha);
|
|
|
|
gSPFogPosition(gMasterDisp++, gFogNear, gFogFar);
|
2023-12-24 22:28:35 +03:00
|
|
|
Lights_SetOneLight(&gMasterDisp, -60, -60, 60, 150, 150, 150, 20, 20, 20);
|
2023-12-20 22:32:50 +03:00
|
|
|
for (i = 0, item = gItems; i < ARRAY_COUNT(gItems); i++, item++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if (item->obj.status >= OBJ_ACTIVE) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x1D);
|
2023-11-22 17:56:29 +03:00
|
|
|
func_800597C0(arg0);
|
2023-12-20 22:32:50 +03:00
|
|
|
Item_Draw(item, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR, gAmbientG,
|
|
|
|
gAmbientB);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void func_8006046C(s32 arg0) {
|
|
|
|
s32 i;
|
2024-01-07 01:39:23 +03:00
|
|
|
Boss* boss;
|
2024-01-13 16:43:04 +03:00
|
|
|
Effect* effect;
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x40);
|
2024-01-13 16:43:04 +03:00
|
|
|
for (i = 0, effect = gEffects; i < ARRAY_COUNT(gEffects); i++, effect++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if (effect->obj.status >= OBJ_ACTIVE) {
|
2024-01-13 16:43:04 +03:00
|
|
|
if (effect->info.unk_14 == 1) {
|
2024-01-29 00:27:23 +03:00
|
|
|
effect->obj.rot.y = RAD_TO_DEG(-gPlayer[gPlayerNum].unk_058);
|
|
|
|
effect->obj.rot.x = RAD_TO_DEG(gPlayer[gPlayerNum].unk_05C);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-24 22:28:35 +03:00
|
|
|
if (gLevelMode == LEVELMODE_ALL_RANGE) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-13 16:43:04 +03:00
|
|
|
Effect_Draw2(effect);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-13 16:43:04 +03:00
|
|
|
Effect_Draw1(effect, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2024-01-21 23:42:06 +03:00
|
|
|
func_8005F1EC(effect->sfxPos);
|
2024-01-13 16:43:04 +03:00
|
|
|
if (effect->obj.id == OBJ_EFFECT_374) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-13 16:43:04 +03:00
|
|
|
func_8005ECD8(i, &effect->obj);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-07 01:39:23 +03:00
|
|
|
for (i = 0, boss = gBosses; i < ARRAY_COUNT(gBosses); i++, boss++) {
|
2024-01-21 23:42:06 +03:00
|
|
|
if ((boss->obj.status >= OBJ_ACTIVE) && (boss->obj.id == OBJ_BOSS_310)) {
|
2024-01-07 01:39:23 +03:00
|
|
|
if (!(boss->timer_05C & 1)) {
|
2023-12-14 17:41:43 +03:00
|
|
|
RCP_SetupDL_29(gFogRed, gFogGreen, gFogBlue, gFogAlpha, gFogNear, gFogFar);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_27();
|
2023-11-22 17:56:29 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 64, 64, 255, 255);
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2024-01-07 01:39:23 +03:00
|
|
|
Boss_Draw(boss, arg0);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80060714(s32 arg0) {
|
|
|
|
D_80161410 = 1;
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_DrawAll(1);
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((D_80161A88 == 2) && (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_2)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
D_80161410 = -1;
|
2023-12-14 17:41:43 +03:00
|
|
|
Lights_SetOneLight(&gMasterDisp, gLight1x, -1 * gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR,
|
|
|
|
gAmbientG, gAmbientB);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, -1.0f, 1.0f, 1);
|
2023-12-19 17:54:50 +03:00
|
|
|
Object_DrawAll(-1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-12-14 17:41:43 +03:00
|
|
|
Lights_SetOneLight(&gMasterDisp, gLight1x, gLight1y, gLight1z, gLight1R, gLight1G, gLight1B, gAmbientR,
|
|
|
|
gAmbientG, gAmbientB);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_8006089C(u8 arg0) {
|
|
|
|
if (arg0 == 0) {
|
|
|
|
D_80161410 = 1;
|
|
|
|
func_8006046C(1);
|
2023-12-24 22:28:35 +03:00
|
|
|
} else if ((D_80161A88 == 2) && (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_2)) {
|
2023-11-22 17:56:29 +03:00
|
|
|
D_80161410 = -1;
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, -1.0f, 1.0f, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
func_8006046C(-1);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
D_80161410 = 1;
|
|
|
|
}
|
|
|
|
|
2023-11-27 00:27:05 +03:00
|
|
|
Vtx D_800CFD40[] = {
|
|
|
|
VTX(1, 0, 0, 0, 0, 255, 255, 255, 255),
|
|
|
|
VTX(-1, 0, 0, 0, 0, 255, 255, 255, 255),
|
|
|
|
VTX(-1, 0, -1, 0, 0, 255, 255, 255, 255),
|
|
|
|
VTX(1, 0, -1, 0, 0, 255, 255, 255, 255),
|
|
|
|
};
|
|
|
|
Gfx D_800CFD80[] = {
|
|
|
|
gsSPVertex(D_800CFD40, 4, 0),
|
|
|
|
gsSP1Quadrangle(1, 2, 3, 0, 0),
|
|
|
|
gsSPEndDisplayList(),
|
|
|
|
};
|
|
|
|
|
2023-11-22 17:56:29 +03:00
|
|
|
void func_80060968(void) {
|
|
|
|
s32 i;
|
|
|
|
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x21);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
2023-12-24 22:28:35 +03:00
|
|
|
} else if ((gCurrentLevel == LEVEL_AQUAS) || (gCurrentLevel == LEVEL_VENOM_ANDROSS)) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0x29);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-04 21:50:52 +03:00
|
|
|
RCP_SetupDL_14();
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-14 17:41:43 +03:00
|
|
|
for (i = 0; i < ARRAY_COUNT(gUnkEntities30); i++) {
|
2023-12-14 20:58:53 +03:00
|
|
|
UnkEntity30* ent30 = &gUnkEntities30[i];
|
|
|
|
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gUnkEntities30[i].mode != 0) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-14 20:58:53 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, ent30->unk_04.x, ent30->unk_04.y, ent30->unk_04.z + D_80177D20, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, ent30->unk_20, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, ent30->unk_1C, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, ent30->unk_20, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, ent30->unk_28, ent30->unk_28, ent30->unk_24, 1);
|
|
|
|
|
2023-12-24 22:28:35 +03:00
|
|
|
if ((gCurrentLevel == LEVEL_AQUAS) || (gCurrentLevel == LEVEL_VENOM_ANDROSS)) {
|
2024-01-17 18:36:58 +03:00
|
|
|
s32 alpha = (gGameFrameCount & 1) ? 180 : 50;
|
2023-12-14 20:58:53 +03:00
|
|
|
|
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, alpha);
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_AQUAS) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 0.01f, 0.3f, 0.0025f, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -200.0f, 1);
|
2024-01-17 18:36:58 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, gGameFrameCount * 5.0f * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_60119A0);
|
2023-12-24 22:28:35 +03:00
|
|
|
} else if (gCurrentLevel == LEVEL_VENOM_ANDROSS) {
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 0.0025f, 1);
|
|
|
|
Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -200.0f, 1);
|
2024-01-17 18:36:58 +03:00
|
|
|
Matrix_RotateZ(gGfxMatrix, gGameFrameCount * 25.0f * M_DTOR, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_C017440);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
2023-12-14 17:41:43 +03:00
|
|
|
if (gCurrentLevel == LEVEL_MACBETH) {
|
2024-01-22 06:28:02 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_6012C00_Gfx);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-14 20:58:53 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, ent30->unk_2C, ent30->unk_2D, ent30->unk_2E,
|
|
|
|
ent30->unk_2F);
|
2023-11-22 17:56:29 +03:00
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFD80);
|
|
|
|
}
|
|
|
|
}
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void func_80060D94(s32 arg0) {
|
2023-12-19 17:54:50 +03:00
|
|
|
UnkEntity30* ent30 = &gUnkEntities30[arg0];
|
2023-11-22 17:56:29 +03:00
|
|
|
|
2023-12-19 17:54:50 +03:00
|
|
|
if (ent30->unk_2F == 0xFF) {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 5);
|
2023-11-22 17:56:29 +03:00
|
|
|
} else {
|
2023-12-01 01:35:40 +03:00
|
|
|
RCP_SetupDL(&gMasterDisp, 0xE);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|
2023-12-19 17:54:50 +03:00
|
|
|
gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, ent30->unk_2C, ent30->unk_2D, ent30->unk_2E, ent30->unk_2F);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Push(&gGfxMatrix);
|
2023-12-19 17:54:50 +03:00
|
|
|
Matrix_Translate(gGfxMatrix, ent30->unk_04.x, ent30->unk_04.y, ent30->unk_04.z, 1);
|
|
|
|
Matrix_RotateY(gGfxMatrix, ent30->unk_20, 1);
|
|
|
|
Matrix_RotateX(gGfxMatrix, ent30->unk_1C, 1);
|
|
|
|
Matrix_RotateZ(gGfxMatrix, ent30->unk_1C, 1);
|
|
|
|
Matrix_Scale(gGfxMatrix, ent30->unk_28, 1.0f, ent30->unk_24, 1);
|
2023-11-22 17:56:29 +03:00
|
|
|
Matrix_SetGfxMtx(&gMasterDisp);
|
|
|
|
gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK);
|
|
|
|
gSPDisplayList(gMasterDisp++, D_800CFD80);
|
|
|
|
gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK);
|
2023-11-24 22:11:20 +03:00
|
|
|
Matrix_Pop(&gGfxMatrix);
|
2023-11-22 17:56:29 +03:00
|
|
|
}
|