diff --git a/include/functions.h b/include/functions.h index c392aadb..3ed95396 100644 --- a/include/functions.h +++ b/include/functions.h @@ -233,14 +233,51 @@ void func_8006B74C(Object_2F4 *); void func_8006EEFC(s32, f32, f32, f32, f32, f32, f32, f32, f32, f32); void func_800763A4(Object_2F4 *, s32); void func_8007717C(Object_2F4 *, s32); - -void func_80077240(f32, f32, f32, s32); -void func_80078E50(f32, f32, f32, f32); -void func_800794CC(f32, f32, f32, f32); +void func_80077240(f32 posX, f32 posY, f32 posZ, s32 arg3); +void func_8007729C(void); +void func_80077790(void); +Object_8C* func_8007783C(s32 objId); +void func_8007797C(f32 posX, f32 posY, f32 posZ, f32 arg3, f32 arg4, f32 arg5, f32 arg6); +void func_80077A00(Object_8C* arg0); +void func_80077A7C(Object_8C* arg0); +void func_80077B78(void* arg0); +void func_80077B84(Object_8C* arg0); +void func_80078038(Object_8C* arg0); +void func_800780F8(Object_8C* arg0); +void func_800783C0(Object_8C* arg0); +void func_80078438(Object_8C* arg0); +void func_800784B4(Object_8C* arg0); +void func_80078550(Object_8C* arg0); +void func_80078604(Object_8C* arg0); +void func_8007868C(Object_8C* arg0); +void func_8007879C(Object_8C* arg0); +void func_800788B0(Object_8C* arg0); +void func_80078A64(Object_8C* arg0); +void func_80078AEC(Object_8C* arg0); +void func_80078B8C(void *unused); +void func_80078BE0(Object_8C* arg0); +void func_80078C84(Object_8C* arg0); +void func_80078CE8(Object_8C* arg0); +void func_80078E50(f32 posX, f32 posY, f32 posZ, f32 arg3); +void func_80078EBC(Object_8C* arg0); +void func_80078F78(Object_8C* arg0); +void func_8007905C(Object_8C* arg0, f32 posX, f32 posY, f32 posZ, f32 arg4, u8 arg5); +void func_800794CC(f32 posX, f32 posY, f32 posZ, f32 arg3); +void func_8007953C(f32 posX, f32 posY, f32 posZ, f32 arg3); +void func_800795AC(f32 posX, f32 posY, f32 posZ, f32 arg3); +void func_80079618(f32 posX, f32 posY, f32 posZ, f32 arg3); +void func_8007968C(Object_8C *arg0); +s32 func_800798C4(s32 arg0, Gfx** arg1, Vec3f* arg2, Vec3f* arg3, void* arg4); //OverrideLimbDraw +void func_800798F0(Object_8C* arg0); +void func_8007A28C(Object_8C* arg0); +void func_8007A3C0(Object_8C* arg0); +void func_8007A568(f32 xPos, f32 yPos, f32 zPos, f32 arg3); void func_8007A6F0(Vec3f *, u32); void func_8007ACE0(f32, f32, f32, f32, f32, f32); void func_8007AFD0(f32, f32, f32, s32, f32); void func_8007B228(f32, f32, f32, f32); +void func_8007B2BC(Object_8C* arg0, f32 xPos, f32 yPos, f32 zPos, f32 arg4, s32 arg5); +void func_8007B344(f32 xPos, f32 yPos, f32 zPos, f32 arg3, s32 arg4); void func_8007BC7C(f32, f32, f32, f32); void func_8007BFFC(f32, f32, f32, f32, f32, f32, f32, s32); void func_8007C120(f32, f32, f32, f32, f32, f32, f32, s32); diff --git a/include/structs.h b/include/structs.h index 33eef56d..ad7ff51a 100644 --- a/include/structs.h +++ b/include/structs.h @@ -302,10 +302,6 @@ typedef struct { /* 0x14 */ char pad14[0x14]; } UnkStruct_D_80175A10; // size = 0x28 -typedef struct { - char unk_00[0x1C]; -} UnkStruct_D_80176438; - typedef struct { /* 0x00 */ Object obj; /* 0x1C */ char pad1C[0x1C]; @@ -392,7 +388,7 @@ typedef struct { /* 0x46 */ s16 unk_46; /* 0x48 */ s16 unk_48; /* 0x4A */ s16 unk_4A; - /* 0x4C */ char pad4C[0x2]; + /* 0x4C */ u8 unk_4C; /* 0x4E */ s16 unk_4E; /* 0x50 */ u16 unk_50; /* 0x50 */ char pad50[0x2]; @@ -542,4 +538,12 @@ typedef struct { /* 0x2E8 */ Vec3f unk_2E8; } Object_2F4; // size = 0x2F4 +typedef struct { + /* 0x00 */ u8 unk_00; + /* 0x04 */ Vec3f pos; //May be a Vec4f + /* 0x10 */ f32 unk_10; + /* 0x14 */ char pad14[0x4]; + /* 0x18 */ u16 unk_18; +} UnkStruct_D_80176438; // size = 0x1C + #endif diff --git a/include/variables.h b/include/variables.h index b4ff6ece..77d0b493 100644 --- a/include/variables.h +++ b/include/variables.h @@ -192,6 +192,13 @@ extern s32 D_800CFF90; extern s16 D_800CFF94[]; extern u8 D_800CFFB4[]; extern f32 D_800CFFC4[]; +extern Gfx* D_800D14E0[][2]; +extern Gfx* D_800D14FC[]; +extern Vec3f D_800D1528; +extern f32 D_800D1534[10][10]; +extern s32 D_800D173C[]; +extern s32 D_800D18F0[]; //[6][4]? +extern s32 D_800D1950[]; extern f32 D_800D19AC[]; extern f32 D_800D19E0[]; extern Gfx D_800D1A40[]; @@ -435,10 +442,10 @@ extern s32 D_801782FC; extern s32 D_80178300; extern u16* D_80178308; extern ObjectInit* D_80178310; -extern s32 D_80178320; -extern s32 D_80178328; -extern s32 D_80178330; -extern s32 D_80178338; +extern s32 D_80178320; //red +extern s32 D_80178328; //green +extern s32 D_80178330; //blue +extern s32 D_80178338; //alpha extern s32 D_80178340; extern s32 D_80178348; extern s32 D_80178350; @@ -458,8 +465,8 @@ extern s32 D_801783A0[]; extern s32 D_801783B0[]; extern f32 D_801783D0; extern f32 D_801783D4; -extern s32 D_801783D8; -extern s32 D_801783DC; +extern s32 D_801783D8; //near +extern s32 D_801783DC; //far extern s32 D_80178410; extern f32 D_80178420; extern f32 D_80178424; @@ -591,12 +598,16 @@ extern u16 D_8038F080[]; extern u16 D_8038F300[]; extern FrameBuffer gFrameBuffers[3]; // 8038F800 +extern Gfx D_1011F20[]; extern u8 D_1013170[]; extern u16 D_1013570[]; extern u16 D_10041C0[]; +extern Gfx D_1015980[]; extern u16 D_1006000[]; +extern Gfx D_1016580[]; extern u16 D_1006F20[]; extern u16 D_1007E40[]; +extern Gfx D_10182C0[]; extern u16 D_1008D60[]; extern u16 D_1009C80[]; extern u16 D_100ABA0[]; @@ -607,7 +618,9 @@ extern u16 D_10050E0[]; extern u16 D_100BAC0[]; extern u16 D_100D900[]; extern u16 D_10032A0[]; +extern void *D_10190C0; // A texture of some sort. extern Gfx D_10194C0[]; +extern Gfx D_1021E20[]; extern Gfx D_1024290[]; extern u8 D_1011A40[]; extern u16 D_1011AB0[]; @@ -630,18 +643,23 @@ extern u8 D_1024A58[]; extern Gfx D_102A8A0[]; extern Gfx D_1024AC0[]; extern Gfx D_1028230[]; +extern Gfx D_101C2E0[]; extern Gfx D_101CAE0[]; extern Gfx D_1023C80[]; extern Gfx D_101A570[]; extern Gfx D_1019CA0[]; extern Gfx D_1016870[]; extern Gfx D_1022E80[]; +extern Gfx D_1029780[]; extern Gfx D_102A010[]; extern Gfx D_1032780[]; extern Gfx D_1019820[]; extern Gfx D_101A8E0[]; -extern Gfx D_102FE80[]; +extern Gfx D_101ABD0[]; extern Gfx D_10231A0[]; +extern Gfx D_102ED50[]; +extern Gfx D_102F5E0[]; +extern Gfx D_102FE80[]; extern Gfx D_2000000[]; extern Gfx D_2000890[]; @@ -661,19 +679,23 @@ extern Gfx D_20055A0[]; extern Gfx D_2005E30[]; extern Gfx D_2006360[]; extern Gfx D_20066C0[]; +extern Gfx D_2006F50[]; extern Gfx D_20073F0[]; extern Gfx D_2008480[]; extern Gfx D_2009510[]; extern Gfx D_200A5A0[]; extern Gfx D_200B630[]; extern Gfx D_200C6C0[]; +extern Gfx D_200D750[]; extern Gfx D_200E7F0[]; extern Gfx D_200F080[]; extern Gfx D_200F910[]; extern Gfx D_20101A0[]; +extern Gfx D_20112C0[]; extern u8 D_3000000[]; extern u16 D_3000080[]; +extern Gfx D_3000660[]; extern u16 D_3000BC0[]; extern u8 D_300D350[]; extern u16 D_300D398[]; @@ -684,6 +706,7 @@ extern u16 D_300D500[]; extern Gfx D_30155E0[]; extern Gfx D_3015D80[]; extern Gfx D_3016660[]; +extern Gfx D_3016B30[]; extern Gfx D_3011720[]; extern Gfx D_3005980[]; extern ObjectInit D_302DE3C[]; @@ -752,6 +775,7 @@ extern Gfx D_602E380[]; extern Gfx D_60320E0[]; extern Gfx D_6032580[]; extern Gfx D_6032BC0[]; +extern Gfx D_6033000[]; extern Gfx D_6034B90[]; extern Gfx D_6035DA0[]; extern Gfx D_60361F0[]; @@ -767,7 +791,20 @@ extern u16 D_600D5C0[]; extern Gfx D_600D730[]; extern Gfx D_600DBC0[]; extern u8 D_600DDC0[]; +extern Gfx D_600F160[]; +extern Gfx D_600F2F0[]; +extern Gfx D_600F3D0[]; +extern Gfx D_600F6C0[]; +extern Gfx D_600F8A0[]; extern u8 D_600F940[]; +extern Gfx D_600F9B0[]; +extern Gfx D_601A7A0[]; +extern Gfx D_60200E0[]; +extern Gfx D_6020A30[]; +extern Gfx D_6020E60[]; +extern Gfx D_60223C0[]; +extern Gfx D_6022450[]; +extern Gfx D_6022530[]; extern Gfx D_60363B0[]; extern Gfx D_6036840[]; extern Gfx D_6036CD0[]; @@ -790,6 +827,8 @@ extern AnimationHeader D_601E8C4; extern Limb* D_601E9D0[]; extern Gfx D_6018C00[]; extern Gfx D_6018D40[]; +extern Gfx D_601FF80[]; +extern Gfx D_6024220[]; extern Gfx D_6024B60[]; extern Gfx D_6025B50[]; extern Gfx D_6007CF0[]; @@ -802,8 +841,10 @@ extern Gfx D_6004570[]; extern u8 D_6001B80[]; extern u8 D_60020D0[]; extern u16 D_6000900[]; +extern Gfx D_6000A80[]; extern u16 D_6000B60[]; extern u16 D_6001820[]; +extern Gfx D_6001A60[]; extern u16 D_6001A80[]; extern u16 D_60029A0[]; extern u16 D_60038C0[]; @@ -823,11 +864,14 @@ extern u16 D_6021ED0[]; extern u16 D_60245E0[]; extern u16 D_6025500[]; extern u16 D_6026420[]; +extern AnimationHeader D_6027320; extern u16 D_6027340[]; +extern Limb* D_602742C; extern Gfx D_605C230[]; extern Vtx D_6001C50[]; extern Vtx D_6004500[]; extern Vtx D_6009ED0[]; +extern Gfx D_600A220[]; extern Vtx D_600C780[]; extern u16 D_6022760[]; extern u16 D_602AC50[]; diff --git a/src/main/sf_77E40.c b/src/main/sf_77E40.c index a9149313..e39ddccd 100644 --- a/src/main/sf_77E40.c +++ b/src/main/sf_77E40.c @@ -1,92 +1,824 @@ -#include "common.h" +#include "global.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077240.s") +void func_80077240(f32 posX, f32 posY, f32 posZ, s32 arg3) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007729C.s") + for (i = 0; i < ARRAY_COUNT(D_80176438); i++) { + if (D_80176438[i].unk_00 == 0) { + D_80176438[i].unk_00 = arg3; + D_80176438[i].pos.x = posX; + D_80176438[i].pos.y = posY; + D_80176438[i].pos.z = posZ; + D_80176438[i].unk_10 = 0.0f; + D_80176438[i].unk_18 = 65; + break; + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077404.s") +void func_8007729C(void) { + UnkStruct_D_80176438* var_s0; + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077790.s") + for (i = 0, var_s0 = D_80176438; i < ARRAY_COUNT(D_80176438); i++, var_s0++) { + if (var_s0->unk_00 != 0) { + if (var_s0->unk_18 != 0) { + var_s0->unk_18 -= 1; + } + if (var_s0->unk_18 == 0) { + var_s0->unk_00 = 0; + } + if (D_80177880 == 0) { + var_s0->pos.z -= D_80177D08; + } else if (D_80178280->unk_1C8 == 3) { + var_s0->pos.x += D_80178280->unk_0C0.x; + var_s0->pos.z += D_80178280->unk_0C0.z; + } + if (var_s0->unk_18 < 45) { + Math_SmoothStepToF(&var_s0->unk_10, 300.0f, 0.1f, 20.0f, 0.0f); + } + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007783C.s") +void func_80077404(UnkStruct_D_80176438* arg0) { + s32 var_a2; + Vec3f sp60; + Vec3f sp54; + f32 sp50; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800778C4.s") + sp60 = D_800D1528; + if (arg0->unk_18 <= 45) { + Matrix_Translate(gGfxMatrix, arg0->pos.x, arg0->pos.y, arg0->pos.z + D_80177D20, 1); + Matrix_MultVec3f(gGfxMatrix, &sp60, &sp54); + if ((fabsf(sp54.x) < 20000.0f) && (fabsf(sp54.y) < 20000.0f)) { + if ((sp54.z < 0.0f) && (sp54.z > -20000.0f)) { + sp50 = sqrtf(VEC3F_SQ(sp54)) * 0.0015f * 0.2f; + Matrix_RotateY(gGfxMatrix, -D_80178280[D_801778A0].unk_058, 1); + Matrix_RotateX(gGfxMatrix, D_80178280[D_801778A0].unk_05C, 1); + Matrix_Scale(gGfxMatrix, sp50, sp50, 1.0f, 1); + Matrix_Translate(gGfxMatrix, 0.0f, arg0->unk_10, 0.0f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + if (arg0->unk_00 < 11) { + gSPDisplayList(gMasterDisp++, D_1015980); + gSPDisplayList(gMasterDisp++, D_800D14FC[arg0->unk_00]); + } else if (arg0->unk_00 == 101) { + gSPDisplayList(gMasterDisp++, D_1011F20); + } else if (arg0->unk_00 == 100) { + gSPDisplayList(gMasterDisp++, D_1016580); + } else { + gSPDisplayList(gMasterDisp++, D_1015980); + switch (arg0->unk_00) { + case 20: + var_a2 = 0; + break; + case 30: + var_a2 = 1; + break; + case 40: + var_a2 = 2; + break; + case 50: + default: + var_a2 = 3; + break; + } + gSPDisplayList(gMasterDisp++, D_800D14E0[var_a2][0]); + gSPDisplayList(gMasterDisp++, D_800D14E0[var_a2][1]); + } + } else { + arg0->unk_00 = 0; + } + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007797C.s") +void func_80077790(void) { + UnkStruct_D_80176438* var_s0; + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077A00.s") + RCP_SetupDL(&gMasterDisp, 0x3E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + for (i = 0, var_s0 = D_80176438; i < ARRAY_COUNT(D_80176438); i++, var_s0++) { + if (var_s0->unk_00 != 0) { + Matrix_Push(&gGfxMatrix); + func_80077404(var_s0); + Matrix_Pop(&gGfxMatrix); + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077A7C.s") +Object_8C* func_8007783C(s32 objId) { + Object_8C* var_a2; + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077B78.s") + for (i = 0, var_a2 = D_80170130; i < ARRAY_COUNT(D_80170130); i++, var_a2++) { + if (var_a2->obj.status == 0) { + func_80061474(var_a2); + var_a2->obj.status = 2; + var_a2->obj.id = objId; + func_800612B8(&var_a2->unk_1C, var_a2->obj.id); + break; + } + } + if (i == ARRAY_COUNT(D_80170130)) { + var_a2 = NULL; + } + return var_a2; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80077B84.s") +void func_800778C4(Object_8C* arg0, f32 posX, f32 posY, f32 posZ, f32 arg4, f32 arg5, f32 arg6, f32 arg7) { + func_80061474(arg0); + arg0->obj.status = 1; + arg0->obj.id = 0x153; + arg0->obj.pos.x = posX; + arg0->obj.pos.y = posY; + arg0->obj.pos.z = posZ; + arg0->unk_54 = arg4; + arg0->unk_58 = arg5; + arg0->unk_5C = arg6; + arg0->unk_70 = arg7; + arg0->unk_4C = 0; + arg0->unk_6C = 0.5f; + arg0->obj.rot.z = Rand_ZeroOne() * 360.0f; + func_800612B8(&arg0->unk_1C, arg0->obj.id); + arg0->unk_44 = 0xFF; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078038.s") +void func_8007797C(f32 posX, f32 posY, f32 posZ, f32 arg3, f32 arg4, f32 arg5, f32 arg6) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800780F8.s") + for (i = ARRAY_COUNT(D_80170130) - 1; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_800778C4(&D_80170130[i], posX, posY, posZ, arg3, arg4, arg5, arg6); + break; + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800783C0.s") +void func_80077A00(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + gSPDisplayList(gMasterDisp++, D_3016B30); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078438.s") +void func_80077A7C(Object_8C* arg0) { + RCP_SetupDL_49(); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + gDPSetEnvColor(gMasterDisp++, 255, 255, 255, arg0->unk_44); + Matrix_Scale(gGfxMatrix, arg0->unk_6C, arg0->unk_70, 1.0f, 1); + Matrix_Translate(gGfxMatrix, 0.0f, 20.0f, 0.0f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_6024220); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800784B4.s") +void func_80077B78(void* arg0) { +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078550.s") +void func_80077B84(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + if ((arg0->unk_6C == 71.0f) || ((D_80178280->unk_1C8 == 7) && (D_80178234 == 0))) { + RCP_SetupDL(&gMasterDisp, 0x26); + } else { + RCP_SetupDL(&gMasterDisp, 0x43); + } + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + switch (arg0->unk_4C) { + case 0: + gDPSetEnvColor(gMasterDisp++, 0, 128, 255, arg0->unk_44); + break; + case 1: + gDPSetEnvColor(gMasterDisp++, 255, 64, 255, arg0->unk_44); + break; + case 2: + gDPSetEnvColor(gMasterDisp++, 255, 128, 0, arg0->unk_44); + break; + case 3: + gDPSetEnvColor(gMasterDisp++, 255, 48, 48, arg0->unk_44); + break; + case 4: + gDPSetEnvColor(gMasterDisp++, 255, 255, 48, arg0->unk_44); + break; + case 5: + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, arg0->unk_44); + gDPSetEnvColor(gMasterDisp++, 255, 32, 32, arg0->unk_44); + break; + case 6: + if (D_80178234 == 0x11) { + RCP_SetupDL(&gMasterDisp, 0x26); + } + switch ((arg0->unk_40 + D_80177DB0) & 3) { + case 0: + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 0, 0, arg0->unk_44); + break; + case 1: + gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 255, 0, arg0->unk_44); + break; + case 2: + gDPSetPrimColor(gMasterDisp++, 0, 0, 0, 0, 255, arg0->unk_44); + break; + case 3: + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, arg0->unk_44); + break; + } + gDPSetEnvColor(gMasterDisp++, 0, 0, 0, arg0->unk_44); + break; + case 7: + gDPSetEnvColor(gMasterDisp++, 48, 48, 255, arg0->unk_44); + break; + case 10: + gDPSetEnvColor(gMasterDisp++, 255, 255, 32, arg0->unk_44); + break; + case 11: + gDPSetEnvColor(gMasterDisp++, 255, 32, 32, arg0->unk_44); + break; + case 12: + gDPSetEnvColor(gMasterDisp++, 32, 255, 32, arg0->unk_44); + break; + case 13: + gDPSetEnvColor(gMasterDisp++, 32, 32, 255, arg0->unk_44); + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078604.s") + gSPDisplayList(gMasterDisp++, D_1024AC0); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007868C.s") +void func_80078038(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + RCP_SetupDL_49(); + RCP_SetupDL(&gMasterDisp, 0x26); + gDPSetPrimColor(gMasterDisp++, 0, 0, 64, 192, 255, arg0->unk_44); + gDPSetEnvColor(gMasterDisp++, 0, 0, 0, arg0->unk_44); + gSPDisplayList(gMasterDisp++, D_1024AC0); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007879C.s") +void func_800780F8(Object_8C* arg0) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800788B0.s") + if (arg0->unk_4A >= 0xB) { + if (!((arg0->unk_40 + D_80177DB0) & 1)) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 128, 128, 32); + } else { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 128, 128, 128); + } + } else if (!((arg0->unk_40 + D_80177DB0) & 1)) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + } else { + gDPSetPrimColor(gMasterDisp++, 0, 0, 96, 96, 255, 255); + } + func_8005980C(arg0->unk_70); + for (i = 0; i < 10; i++) { + if ((i >= arg0->unk_48) && (i < arg0->unk_46)) { + Matrix_Push(&gGfxMatrix); + Matrix_Translate(gGfxMatrix, 0.0f, -60.0f, 0.0f, 1); + Matrix_Scale(gGfxMatrix, 0.8f, 3.0f, 1.0f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_102F5E0); + Matrix_Pop(&gGfxMatrix); + } + Matrix_Translate(gGfxMatrix, 0.0f, -120.0f, 0.0f, 1); + Matrix_RotateZ(gGfxMatrix, D_800D1534[arg0->unk_4C][i] * M_DTOR, 1); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078A64.s") +void func_800783C0(Object_8C* arg0) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + func_8005980C(arg0->unk_70); + gSPDisplayList(gMasterDisp++, D_2006F50); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078AE0.s") +void func_80078438(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_4A); + gSPDisplayList(gMasterDisp++, D_102A8A0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078AEC.s") +void func_800784B4(Object_8C* arg0) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_46); + func_8005980C(arg0->unk_70); + Matrix_RotateX(gGfxMatrix, (M_PI / 2.0f), 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_200D750); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078B8C.s") +void func_80078550(Object_8C* arg0) { + RCP_SetupDL(&gMasterDisp, 0x43); + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_4A); + gDPSetEnvColor(gMasterDisp++, 101, 138, 153, 255); + gSPDisplayList(gMasterDisp++, D_3000660); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078BE0.s") +void func_80078604(Object_8C* arg0) { + if (arg0->unk_50 == 0) { + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + gSPDisplayList(gMasterDisp++, D_20112C0); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078C84.s") +void func_8007868C(Object_8C* arg0) { + RCP_SetupDL_60(D_80178320, D_80178328, D_80178330, D_80178338, D_801783D8, D_801783DC); + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + Matrix_Scale(gGfxMatrix, arg0->unk_70, arg0->unk_70, arg0->unk_70, 1); + if (arg0->unk_44 >= 2) { + Matrix_RotateX(gGfxMatrix, (M_PI / 2.0f), 1); + } + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1029780); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078CE8.s") +void func_8007879C(Object_8C* arg0) { + RCP_SetupDL_60(D_80178320, D_80178328, D_80178330, D_80178338, D_801783D8, D_801783DC); + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + Matrix_Scale(gGfxMatrix, arg0->unk_70 * 0.6f, 1.0f, arg0->unk_70 * 3.5f, 1); + Matrix_RotateX(gGfxMatrix, (M_PI / 2.0f), 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_1029780); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078D60.s") +void func_800788B0(Object_8C* arg0) { + s32 temp_ft3; + s32* tmp; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078E50.s") + switch (D_80178234) { + case 1: + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 128, 128, 128, 255); + gSPDisplayList(gMasterDisp++, D_601FF80); + break; + case 13: + RCP_SetupDL(&gMasterDisp, 0x43); + temp_ft3 = Math_ModF(arg0->unk_40, 4.0f); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, (s32) arg0->unk_6C); + tmp = &D_800D173C[(s32) (temp_ft3 * 4.0f)]; + gDPSetEnvColor(gMasterDisp++, tmp[0], tmp[1], tmp[2], 255); + func_8005980C(arg0->unk_70); + gSPDisplayList(gMasterDisp++, D_1024AC0); + RCP_SetupDL(&gMasterDisp, 0x40); + break; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078EBC.s") +void func_80078A64(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + gSPDisplayList(gMasterDisp++, D_20112C0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80078F78.s") +void func_80078AE0(void* arg0) { +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007905C.s") +void func_80078AEC(Object_8C* arg0) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 180); + func_8005980C(arg0->unk_70 * (13.0f + ((D_80177DB0 & 1) * 2.5f))); + gSPDisplayList(gMasterDisp++, D_102ED50); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800794CC.s") +void func_80078B8C(void* unused) { + RCP_SetupDL_21(); + gSPDisplayList(gMasterDisp++, D_101ABD0); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007953C.s") +void func_80078BE0(Object_8C* arg0) { + f32 var_fv0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800795AC.s") + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 160); + var_fv0 = 3.0f; + if (D_80177DB0 & 1) { + var_fv0 *= 1.2f; + } + func_8005980C(arg0->unk_70 * var_fv0); + gSPDisplayList(gMasterDisp++, D_600F8A0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80079618.s") +void func_80078C84(Object_8C* arg0) { + func_8005980C(arg0->unk_70); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 192); + gSPDisplayList(gMasterDisp++, D_6000A80); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007968C.s") +void func_80078CE8(Object_8C* arg0) { + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_4A); + func_8005980C(arg0->unk_70); + gSPDisplayList(gMasterDisp++, D_6033000); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800798C4.s") +void func_80078D60(Object_8C* arg0, f32 posX, f32 posY, f32 posZ, f32 arg4) { + func_80061474(arg0); + arg0->obj.status = 1; + arg0->obj.id = 0x189; + arg0->obj.pos.x = posX; + arg0->obj.pos.y = posY; + arg0->obj.pos.z = posZ; + arg0->unk_70 = arg4; + if (arg4 == 3.1f) { + arg0->unk_54 = D_80163FE0[8].unk_0E8; + arg0->unk_58 = D_80163FE0[8].unk_0EC; + arg0->unk_5C = D_80163FE0[8].unk_0F0; + } + if (arg4 != 30.0f) { + arg0->unk_4E = 1; + } + if (arg4 == 3.5f) { + arg0->unk_4E = 2; + } + arg0->unk_50 = 0xE; + func_800612B8(&arg0->unk_1C, arg0->obj.id); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_800798F0.s") +void func_80078E50(f32 posX, f32 posY, f32 posZ, f32 arg3) { + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007A28C.s") + for (i = ARRAY_COUNT(D_80170130) - 1; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_80078D60(&D_80170130[i], posX, posY, posZ, arg3); + break; + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007A3C0.s") +void func_80078EBC(Object_8C* arg0) { + if (arg0->unk_4E == 2) { + arg0->unk_54 = D_80178280->unk_0C0.x; + arg0->unk_58 = D_80178280->unk_0C0.y; + arg0->unk_5C = D_80178280->unk_0C0.z; + } + arg0->obj.rot.z += 35.0f; + if (arg0->unk_50 >= 7) { + arg0->unk_6C += 0.25f; + } else { + arg0->unk_6C -= 0.25f; + } + if (arg0->unk_6C <= 0.0f) { + func_80060FBC(&arg0->obj, &arg0->unk_80); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007A4B8.s") +void func_80078F78(Object_8C* arg0) { + if (arg0->unk_4E != 0) { + RCP_SetupDL(&gMasterDisp, 0x43); + } else { + RCP_SetupDL(&gMasterDisp, 0x3F); + } + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gMasterDisp++, 255, 255, 0, 255); + func_8005980C(arg0->unk_70 * arg0->unk_6C); + gSPDisplayList(gMasterDisp++, D_101C2E0); + RCP_SetupDL(&gMasterDisp, 0x40); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007A568.s") +void func_8007905C(Object_8C* arg0, f32 posX, f32 posY, f32 posZ, f32 arg4, u8 arg5) { + Vec3f sp54; + Vec3f sp48; + Vec3f sp3C; + f32 sp38; + f32 xAng; + f32 yAng; + + func_80061474(arg0); + arg0->obj.status = 2; + arg0->obj.id = 0x165; + arg0->obj.pos.x = posX; + arg0->obj.pos.y = posY; + arg0->obj.pos.z = posZ; + arg0->unk_4C = arg5; + if (arg4 == 1.6f) { + arg0->unk_54 = (posX - D_8016F110[1].obj.pos.x) * 0.1f; + arg0->unk_5C = (posZ - D_8016F110[1].obj.pos.z) * 0.1f; + } else if (arg4 == 1.3f) { + arg0->unk_54 = ((Rand_ZeroOne() * 0.05f) + 0.03f) * posX; + arg0->unk_5C = ((Rand_ZeroOne() * 0.05f) + 0.03f) * posZ; + arg0->unk_58 = 5.0f; + } else if (arg4 == 1.55f) { + arg0->unk_54 = (Rand_ZeroOne() - 0.5f) * 10.0f; + arg0->unk_5C = (Rand_ZeroOne() - 0.5f) * 10.0f; + } else if ((D_80178234 == 0x11) && ((arg4 == 5.11f) || (arg4 == 7.22f))) { + sp3C.x = D_80178280->unk_074; + sp3C.y = D_80178280->unk_078; + sp3C.z = D_80178280->unk_07C; + yAng = Math_Atan2F(sp3C.x - posX, sp3C.z - posZ); + sp38 = sqrtf(SQ(sp3C.x - posX) + SQ(sp3C.z - posZ)); + xAng = -Math_Atan2F(sp3C.y - posY, sp38); + Matrix_RotateY(gCalcMatrix, yAng, 0); + Matrix_RotateX(gCalcMatrix, xAng, 1); + sp54.x = (Rand_ZeroOne() - 0.5f) * 50.0f; + sp54.y = (Rand_ZeroOne() - 0.5f) * 50.0f; + sp54.z = (Rand_ZeroOne() * 10.0f) + 150.0f; + Matrix_MultVec3f(gCalcMatrix, &sp54, &sp48); + arg0->unk_54 = sp48.x; + arg0->unk_58 = sp48.y; + arg0->unk_5C = sp48.z; + } else { + arg0->unk_58 = (D_80177C98 == 0) ? (Rand_ZeroOne() * 7.0f) + 7.0f : (Rand_ZeroOne() - 0.5f) * 10.0f; + arg0->unk_54 = (Rand_ZeroOne() - 0.5f) * 10.0f; + arg0->unk_5C = (Rand_ZeroOne() - 0.5f) * 10.0f; + } + arg0->unk_70 = ((Rand_ZeroOne() * 0.8f) + 0.3f) * arg4; + arg0->unk_50 = (s32) (Rand_ZeroOne() * 50.0f) + 0x46; + arg0->obj.rot.x = Rand_ZeroOne() * 360.0f; + arg0->unk_60.x = (Rand_ZeroOne() - 0.5f) * 30.0f; + arg0->unk_60.y = (Rand_ZeroOne() - 0.5f) * 30.0f; + arg0->unk_60.z = (Rand_ZeroOne() - 0.5f) * 30.0f; + func_800612B8(&arg0->unk_1C, arg0->obj.id); +} + +void func_800794CC(f32 posX, f32 posY, f32 posZ, f32 arg3) { + s32 i; + + for (i = 50; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_8007905C(&D_80170130[i], posX, posY, posZ, arg3, 0); + break; + } + } +} + +void func_8007953C(f32 posX, f32 posY, f32 posZ, f32 arg3) { + s32 i; + + for (i = 79; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_8007905C(&D_80170130[i], posX, posY, posZ, arg3, 0); + break; + } + } +} + +void func_800795AC(f32 posX, f32 posY, f32 posZ, f32 arg3) { + s32 i; + + for (i = 0; i < 95; i++) { + if (D_80170130[i].obj.status == 0) { + func_8007905C(&D_80170130[i], posX, posY, posZ, arg3, 0); + break; + } + } +} + +void func_80079618(f32 posX, f32 posY, f32 posZ, f32 arg3) { + s32 i; + + for (i = 50; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_8007905C(&D_80170130[i], posX, posY, posZ, arg3, 1); + break; + } + } +} + +void func_8007968C(Object_8C* arg0) { + if ((D_80178234 != 0xB) || (arg0->unk_44 != 7)) { + if ((arg0->unk_50 == 0) || (arg0->obj.pos.y < D_80177940)) { + func_80060FBC(&arg0->obj, &arg0->unk_80); + } + } else { + if (!(D_80177DB0 & 3)) { + func_8007D2C8(arg0->obj.pos.x, arg0->obj.pos.y + 550.0f, arg0->obj.pos.z, 10.0f); + } + if ((arg0->unk_50 == 0) || (arg0->obj.pos.y < (D_80177940 - 100.0f))) { + func_80060FBC(&arg0->obj, &arg0->unk_80); + } + } + arg0->obj.rot.x += arg0->unk_60.x; + arg0->obj.rot.y += arg0->unk_60.y; + arg0->obj.rot.z += arg0->unk_60.z; + if (D_80177C98 == 0) { + arg0->unk_58 -= 0.5f; + } + if ((D_80178234 == 0x11) && (D_80178280->unk_1C8 == 7) && (D_80177A80 >= 0xB0)) { + arg0->unk_54 *= 0.95f; + arg0->unk_58 *= 0.95f; + arg0->unk_5C *= 0.95f; + } + if ((D_80178234 == 0xB) && (arg0->unk_44 == 0xA)) { + arg0->obj.rot.x = 0.0f; + arg0->obj.rot.y = 0.0f; + if (arg0->unk_50 >= 25) { + arg0->unk_6C = 0.5f; + } else if (arg0->unk_6C > 0.03) { + arg0->unk_6C -= 0.02f; + } + } +} + +s32 func_800798C4(s32 arg0, Gfx** arg1, Vec3f* arg2, Vec3f* arg3, void* arg4) { + if ((arg0 != 1) && (arg0 != 5)) { + *arg1 = NULL; + } + return 0; +} + +void func_800798F0(Object_8C* arg0) { + Vec3f frameJointTable[50]; + + if ((D_80178234 == 0x11) && (D_80178280->unk_1C8 == 7)) { + func_8005F670(&arg0->obj.pos); + } + RCP_SetupDL(&gMasterDisp, 0x1D); + if (D_80178234 == 0x10) { + gSPFogPosition(gMasterDisp++, D_801783D8, 1005); + } + func_8005980C(arg0->unk_70); + switch (D_80178234) { + case 11: + switch (arg0->unk_44) { + case 1: + if (arg0->unk_40 & 1) { + gSPDisplayList(gMasterDisp++, D_6022530); + } else { + gSPDisplayList(gMasterDisp++, D_6022450); + } + break; + case 2: + RCP_SetupDL(&gMasterDisp, 0x39); + if (arg0->unk_40 & 1) { + gSPDisplayList(gMasterDisp++, D_601A7A0); + } else { + gSPDisplayList(gMasterDisp++, D_60223C0); + } + RCP_SetupDL(&gMasterDisp, 0x1D); + break; + case 7: + Animation_GetFrameData(&D_6027320, 0, frameJointTable); + Animation_DrawSkeleton(1, &D_602742C, frameJointTable, func_800798C4, NULL, arg0, &gIdentityMatrix); + break; + case 8: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_6020E60); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 9: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_6020A30); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 10: + RCP_SetupDL(&gMasterDisp, 0x43); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + gDPSetEnvColor(gMasterDisp++, 255, 80, 0, 255); + func_8005980C(arg0->unk_6C); + gSPDisplayList(gMasterDisp++, D_1024AC0); + break; + case 11: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_60200E0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 12: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_600F2F0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 13: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_6001A60); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 14: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_600F160); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 15: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_600F3D0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 16: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_600F6C0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + case 17: + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_600F9B0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + break; + default: + if (arg0->unk_40 & 1) { + gSPDisplayList(gMasterDisp++, D_10194C0); + } else { + gSPDisplayList(gMasterDisp++, D_1024290); + } + break; + } + break; + case 13: + Matrix_SetGfxMtx(&gMasterDisp); + RCP_SetupDL(&gMasterDisp, 0x3C); + gSPDisplayList(gMasterDisp++, D_600A220); + break; + default: + switch (arg0->unk_4C) { + case 0: + if (arg0->unk_40 & 1) { + gSPDisplayList(gMasterDisp++, D_10194C0); + } else { + gSPDisplayList(gMasterDisp++, D_1024290); + } + break; + case 1: + switch (arg0->unk_40 & 3) { + case 0: + Matrix_Scale(gGfxMatrix, 1.0f, 0.3f, 1.0f, 1); + break; + case 1: + Matrix_Scale(gGfxMatrix, 0.3f, 1.0f, 1.0f, 1); + break; + case 2: + Matrix_Scale(gGfxMatrix, 1.0f, 0.5f, 1.0f, 1); + break; + case 3: + Matrix_Scale(gGfxMatrix, 0.5f, 1.0f, 1.0f, 1); + break; + } + Matrix_SetGfxMtx(&gMasterDisp); + RCP_SetupDL(&gMasterDisp, 0x39); + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_1021E20); + RCP_SetupDL(&gMasterDisp, 0x40); + break; + } + break; + } + RCP_SetupDL(&gMasterDisp, 0x40); + if (D_80178234 == 0x10) { + gSPFogPosition(gMasterDisp++, D_801783D8, D_801783DC); + } +} + +void func_8007A28C(Object_8C* arg0) { + Texture_Scroll(&D_10190C0, 16, 32, 0); + D_8017812C = 2; + arg0->obj.rot.y += 1.0f; + Math_SmoothStepToF(&arg0->unk_70, arg0->unk_6C, 0.05f, 1.5f, 0.001f); + if (arg0->unk_50 >= 0xB) { + D_801779A8[0] = 60.0f; + } + if (arg0->unk_50 == 0x30) { + D_80178340 = 0x96; + } + if (arg0->unk_50 >= 0x2E) { + D_80178358 = 0; + D_80178348 = D_80178350 = D_80178354 = 0xFF; + } + D_8017835C = 3; + if (arg0->unk_50 == 0) { + arg0->unk_44 -= 2; + if (arg0->unk_44 < 0) { + arg0->unk_44 = 0; + func_80060FBC(&arg0->obj, &arg0->unk_80); + D_8017812C = 0; + } + } +} + +void func_8007A3C0(Object_8C* arg0) { + if (D_80161410 > 0) { + Matrix_Scale(gGfxMatrix, arg0->unk_70, arg0->unk_70, arg0->unk_70, 1); + Matrix_SetGfxMtx(&gMasterDisp); + RCP_SetupDL_64_2(); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, arg0->unk_44); + gSPClearGeometryMode(gMasterDisp++, G_CULL_BACK); + gSPDisplayList(gMasterDisp++, D_10182C0); + gSPSetGeometryMode(gMasterDisp++, G_CULL_BACK); + RCP_SetupDL_64_2(); + } +} + +void func_8007A4B8(Object_8C* arg0, f32 xPos, f32 yPos, f32 zPos, f32 arg4) { + func_80061474(arg0); + arg0->obj.status = 1; + arg0->obj.id = 0x17F; + arg0->unk_6C = arg4; + arg0->unk_50 = 50; + arg0->unk_44 = 200; + arg0->obj.pos.x = xPos; + arg0->obj.pos.y = yPos; + arg0->obj.pos.z = zPos; + func_80019218(0x2940F026, &arg0->unk_80, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); + func_800612B8(&arg0->unk_1C, arg0->obj.id); +} + +void func_8007A568(f32 xPos, f32 yPos, f32 zPos, f32 arg3) { + s32 i; + + for (i = ARRAY_COUNT(D_80170130) - 1; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_8007A4B8(&D_80170130[i], xPos, yPos, zPos, arg3); + break; + } + } + func_8007B344(xPos, yPos, zPos, 80.0f, 4); +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007A5F8.s") @@ -126,9 +858,29 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007B228.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007B2BC.s") +void func_8007B2BC(Object_8C* arg0, f32 xPos, f32 yPos, f32 zPos, f32 arg4, s32 arg5) { + func_80061474(arg0); + arg0->obj.status = 1; + arg0->obj.id = 0x180; + arg0->obj.pos.x = xPos; + arg0->obj.pos.y = yPos; + arg0->obj.pos.z = zPos; + arg0->unk_6C = arg4; + arg0->unk_44 = 0xFF; + arg0->unk_4C = arg5; + func_800612B8(&arg0->unk_1C, arg0->obj.id); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007B344.s") +void func_8007B344(f32 xPos, f32 yPos, f32 zPos, f32 arg3, s32 arg4) { + s32 i; + + for (i = ARRAY_COUNT(D_80170130) - 1; i >= 0; i--) { + if (D_80170130[i].obj.status == 0) { + func_8007B2BC(&D_80170130[i], xPos, yPos, zPos, arg3, arg4); + break; + } + } +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_8007B3B8.s") @@ -340,6 +1092,25 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80083FA8.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/func_80084194.s") +void func_80084194(Object_8C* arg0) { + s32 tmp; + + if (D_80178234 != 0xD) { + RCP_SetupDL(&gMasterDisp, 0x31); + Matrix_Scale(gGfxMatrix, arg0->unk_70, arg0->unk_70, arg0->unk_70, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + tmp = arg0->unk_44 * 4; + gDPSetEnvColor(gMasterDisp++, D_800D18F0[tmp + 0], D_800D18F0[tmp + 1], D_800D18F0[tmp + 2], 255); + } else { + RCP_SetupDL(&gMasterDisp, 0x31); + Matrix_Scale(gGfxMatrix, arg0->unk_70, arg0->unk_70, arg0->unk_70, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, D_800D1950[arg0->unk_44]); + gDPSetEnvColor(gMasterDisp++, 255, 0, 0, 255); + } + gSPDisplayList(gMasterDisp++, D_1024AC0); + RCP_SetupDL(&gMasterDisp, 0x40); +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_77E40/D_800D7230.s") diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index 64f859d4..ea917273 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -5,4 +5,4 @@ compiler_type = "ido" "gs[DS]P.*" = "void" [decompme.compilers] -"tools/ido_recomp/linux/5.3/cc" = "ido5.3" \ No newline at end of file +"tools/ido-recomp/linux/cc" = "ido5.3" \ No newline at end of file