From eed45acf51cf4fa6d14349b0f37eb17c6d5a0e2b Mon Sep 17 00:00:00 2001 From: Kelebek1 Date: Wed, 11 Jun 2025 00:59:35 +0100 Subject: [PATCH] 3540B0 and 354CD0 --- src/fragments/62/fragment62.h | 79 +++++- src/fragments/62/fragment62_317E70.c | 8 +- src/fragments/62/fragment62_3540B0.c | 264 +++++++++++++++++++- src/fragments/62/fragment62_354CD0.c | 359 +++++++++++++++++++++++++++ yamls/us/rom.yaml | 13 +- 5 files changed, 695 insertions(+), 28 deletions(-) create mode 100644 src/fragments/62/fragment62_354CD0.c diff --git a/src/fragments/62/fragment62.h b/src/fragments/62/fragment62.h index 25ab145..b1536f3 100644 --- a/src/fragments/62/fragment62.h +++ b/src/fragments/62/fragment62.h @@ -600,6 +600,62 @@ typedef struct unk_D_843AB940 { /* 0x038 */ unk_D_843AB940_038 unk_038[15]; } unk_D_843AB940; // size = 0x434 +typedef struct unk_D_843ACA10_01C { + /* 0x00 */ u8 unk_00; + /* 0x04 */ f32 unk_04; + /* 0x08 */ f32 unk_08; + /* 0x0C */ Vec3f unk_0C; + /* 0x18 */ Vec3f unk_18; + /* 0x24 */ f32 unk_24; + /* 0x28 */ f32 unk_28; + /* 0x2C */ Vec3f unk_2C; + /* 0x38 */ Vec3f unk_38; +} unk_D_843ACA10_01C; // size = 0x44 + +typedef struct unk_D_843ACA10 { + /* 0x000 */ s16 unk_000; + /* 0x002 */ s16 unk_002; + /* 0x004 */ s16 unk_004; + /* 0x006 */ s16 unk_006; + /* 0x008 */ Color_RGB8 unk_008; + /* 0x010 */ f32 unk_00C; + /* 0x010 */ f32 unk_010; + /* 0x014 */ Vtx* unk_014; + /* 0x018 */ unk_D_8140E720* unk_018; + /* 0x01C */ unk_D_843ACA10_01C unk_01C[15]; + /* 0x418 */ f32 unk_418; +} unk_D_843ACA10; // size = 0x41C + +typedef struct unk_D_843ADA80_040 { + /* 0x00 */ u8 unk_00; + /* 0x04 */ f32 unk_04; + /* 0x08 */ f32 unk_08; + /* 0x0C */ Vec3f unk_0C; + /* 0x18 */ Vec3f unk_18; + /* 0x24 */ Vec3f unk_24; + /* 0x30 */ f32 unk_30; + /* 0x34 */ f32 unk_34; + /* 0x38 */ Vec3f unk_38; + /* 0x44 */ Vec3f unk_44; +} unk_D_843ADA80_040; // size = 0x50 + +typedef struct unk_D_843ADA80 { + /* 0x000 */ s16 unk_000; + /* 0x002 */ s16 unk_002; + /* 0x004 */ s16 unk_004; + /* 0x006 */ s16 unk_006; + /* 0x008 */ s16 unk_008; + /* 0x00A */ Color_RGB8 unk_00A; + /* 0x010 */ f32 unk_010; + /* 0x014 */ f32 unk_014; + /* 0x018 */ f32 unk_018; + /* 0x01C */ char unk01C[0x4]; + /* 0x020 */ Vtx* unk_020; + /* 0x024 */ Vec3f unk_024; + /* 0x030 */ char unk030[0x10]; + /* 0x040 */ unk_D_843ADA80_040 unk_040[10]; +} unk_D_843ADA80; // size = 0x360 + extern unk_D_8438E7B0* D_84384570[]; extern unk_D_8438FF70* D_84384578[]; extern unk_D_8438FF70* D_84384580[]; @@ -641,6 +697,7 @@ extern func_D_84390320 D_84388A50[]; extern func_D_84390320 D_84388CA8[]; extern u32 D_8438A648[]; extern Gfx D_8438A980[]; +extern Gfx D_84389AE0[]; extern u8 D_843C4DA4; @@ -1606,8 +1663,8 @@ void func_8432F9A8(s32 arg0); void func_8432F9B4(void); s32 func_8432F9C0(void); s32 func_8432F9CC(s32 arg0); -void func_8432FA0C(void); -void func_8432FA30(void); +s32 func_8432FA0C(void); +s32 func_8432FA30(void); void func_8432FA54(unk_D_84390010* arg0, s16 arg1, Vec3f* arg2); void func_8432FB38(Vec3f* arg0); void func_8432FB64(Vec3f* arg0); @@ -2641,13 +2698,21 @@ Gfx* func_84369388(Gfx* arg0); void func_843697F0(void); -void func_84369950(f32, f32, f32, f32, f32, f32, s32, s32, s32, s32, f32, f32, f32, s32); +void func_84369950(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, f32 argA, f32 argB, f32 argC, s16 argD); +void func_84369BF0(f32 arg0, Vec3f* arg1, f32 arg2); +void func_84369C80(unk_D_843ACA10* arg0); s32 func_84369F0C(void); -Gfx* func_84369FA0(Gfx*); +Gfx* func_84369FA0(Gfx* arg0); + + void func_8436A410(void); -void func_8436A540(f32, f32, f32, f32, f32, f32, s32, s32, s32, s32, f32, f32, f32, s32); -void func_8436ABA8(void); -Gfx* func_8436AC44(Gfx*); +void func_8436A540(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, f32 argA, f32 argB, f32 argC, s16 argD); +void func_8436A808(f32 arg0, Vec3f* arg1, f32 arg2); +void func_8436A890(unk_D_843ADA80* arg0); +s32 func_8436ABA8(void); +Gfx* func_8436AC44(Gfx* arg0); + + void func_8436B140(void); void func_8436B270(f32, f32, f32, f32, f32, f32, s32, s32, s32, s32, f32, f32, f32, s32); void func_8436B8D8(void); diff --git a/src/fragments/62/fragment62_317E70.c b/src/fragments/62/fragment62_317E70.c index f3bed22..bbe5a52 100644 --- a/src/fragments/62/fragment62_317E70.c +++ b/src/fragments/62/fragment62_317E70.c @@ -811,12 +811,12 @@ s32 func_8432F9CC(s32 arg0) { return sp1C; } -void func_8432FA0C(void) { - func_843081BC(D_843902EC); +s32 func_8432FA0C(void) { + return func_843081BC(D_843902EC); } -void func_8432FA30(void) { - func_843081BC(D_843902F0); +s32 func_8432FA30(void) { + return func_843081BC(D_843902F0); } void func_8432FA54(unk_D_84390010* arg0, s16 arg1, Vec3f* arg2) { diff --git a/src/fragments/62/fragment62_3540B0.c b/src/fragments/62/fragment62_3540B0.c index 902a4e4..b910574 100644 --- a/src/fragments/62/fragment62_3540B0.c +++ b/src/fragments/62/fragment62_3540B0.c @@ -1,25 +1,263 @@ -#include "global.h" +#include "fragment62.h" +#include "src/6A40.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_843697F0.s") +static unk_D_843ACA10 D_843ACA10[4]; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_84369950.s") +static Gfx D_84389A00[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_1CYCLE), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPSetRenderMode(G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetColorDither(G_CD_NOISE), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_84369BF0.s") +void func_843697F0(void) { + s32 i; + s32 j; + unk_D_843ACA10* var_v0 = &D_843ACA10[0]; + unk_D_843ACA10_01C* var_a0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_84369C80.s") + for (i = 0; i < 4; i++, var_v0++) { + var_v0->unk_000 = 0; + var_v0->unk_002 = 0; + var_v0->unk_004 = 0; + var_v0->unk_418 = 0.16f; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_84369F0C.s") + var_a0 = &var_v0->unk_01C[0]; + for (j = 0; j < 15; j++, var_a0++) { + var_a0->unk_00 = 0; + var_a0->unk_04 = 1.0f; + var_a0->unk_08 = 0.0f; + var_a0->unk_0C.x = 0.0f; + var_a0->unk_0C.y = 0.0f; + var_a0->unk_0C.z = 0.0f; + var_a0->unk_18.x = 0.0f; + var_a0->unk_18.y = 0.0f; + var_a0->unk_18.z = 0.0f; + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_84369FA0.s") +void func_84369950(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, + f32 argA, f32 argB, f32 argC, s16 argD) { + s32 i; + s32 j; + unk_D_843ACA10* var_v1; + unk_D_843ACA10_01C* var_s0; + Vec3f sp64; + Vec3f sp58; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436A410.s") + sp64.x = arg0; + sp64.y = arg1; + sp64.z = arg2; + sp58.x = arg3; + sp58.y = arg4; + sp58.z = arg5; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436A540.s") + var_v1 = &D_843ACA10[0]; + for (i = 0; i < 4; i++, var_v1++) { + if (var_v1->unk_000 == 0) { + var_v1->unk_000 = 1; + var_v1->unk_002 = 0; + var_v1->unk_004 = argD; + var_v1->unk_008.r = arg6; + var_v1->unk_008.g = arg7; + var_v1->unk_008.b = arg8; + var_v1->unk_010 = argA; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436A808.s") + if (func_8432FA0C() == 0xD) { + var_v1->unk_418 = 0.08f; + var_v1->unk_00C = argC * 0.5f; + } else { + var_v1->unk_418 = 0.16f; + var_v1->unk_00C = argC; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436A890.s") + var_v1->unk_018 = func_8432FD70(sp64, 2); + if (arg3 < 0.0) { + var_v1->unk_006 = -1; + } else { + var_v1->unk_006 = 1; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436ABA8.s") + var_s0 = &var_v1->unk_01C[0]; + for (j = 0; j < 15; j++, var_s0++) { + var_s0->unk_00 = (arg9 * (0xE - j)) / 15; + var_s0->unk_04 = argB; + var_s0->unk_08 = (RAND(120) * 6.2831855f) / 120.0; + var_s0->unk_0C = sp64; + var_s0->unk_18 = sp58; + } + break; + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_3540B0/func_8436AC44.s") +void func_84369BF0(f32 arg0, Vec3f* arg1, f32 arg2) { + UNUSED MtxF sp70; + MtxF sp30; + UNUSED s32 pad; + + guRotateF(sp30.mf, (arg0 * 360.0) / 6.2831854820251465, 1.0f, 0.0f, 0.0f); + guMtxXFMF(sp30.mf, 0.0f, 0.0f, arg2, &arg1->x, &arg1->y, &arg1->z); +} + +void func_84369C80(unk_D_843ACA10* arg0) { + s32 i; + unk_D_843ACA10_01C* var_s0 = &arg0->unk_01C[0]; + + for (i = 0; i < 15; i++, var_s0++) { + if (i == 0) { + var_s0->unk_24 = var_s0->unk_04; + var_s0->unk_28 = var_s0->unk_08; + + var_s0->unk_2C = var_s0->unk_0C; + var_s0->unk_38 = var_s0->unk_18; + + var_s0->unk_0C.x += var_s0->unk_18.x; + var_s0->unk_0C.y += var_s0->unk_18.y; + var_s0->unk_0C.z += var_s0->unk_18.z; + + var_s0->unk_08 += arg0->unk_010; + if (arg0->unk_006 > 0) { + var_s0->unk_18.x += 0.4; + if (var_s0->unk_18.x > 20.0) { + var_s0->unk_18.x = 20.0f; + } + } else { + var_s0->unk_18.x -= 0.4; + if (var_s0->unk_18.x < -20.0) { + var_s0->unk_18.x = -20.0f; + } + } + + func_8432FDF0(arg0->unk_018, var_s0->unk_0C); + + var_s0->unk_04 += 2.0; + if (arg0->unk_00C < var_s0->unk_04) { + var_s0->unk_04 = arg0->unk_00C; + } + } else { + var_s0->unk_24 = var_s0->unk_04; + var_s0->unk_28 = var_s0->unk_08; + + var_s0->unk_2C = var_s0->unk_0C; + var_s0->unk_38 = var_s0->unk_18; + + var_s0->unk_0C = var_s0[-1].unk_2C; + var_s0->unk_08 = var_s0[-1].unk_28; + var_s0->unk_18 = var_s0[-1].unk_38; + var_s0->unk_04 = var_s0[-1].unk_24; + } + } +} + +s32 func_84369F0C(void) { + s32 i; + unk_D_843ACA10* var_s0 = &D_843ACA10[0]; + + for (i = 0; i < 4; i++, var_s0++) { + if (var_s0->unk_000 == 1) { + var_s0->unk_002 += 1; + if (var_s0->unk_004 < var_s0->unk_002) { + var_s0->unk_000 = 0; + } else { + func_84369C80(var_s0); + } + } + } + + return 0; +} + +Gfx* func_84369FA0(Gfx* arg0) { + s32 i; + s32 j; + s32 k; + unk_D_843ACA10_01C* temp_s0; + unk_D_843ACA10* var_s5; + Vtx* var_s0; + Vec3f sp154; + UNUSED s32 pad[15]; + Mtx* temp_v0; + Mtx sp100; + Mtx spC0; + s16 var_s3; + + var_s5 = &D_843ACA10[0]; + for (i = 0; i < 4; i++, var_s5++) { + if (var_s5->unk_000 == 1) { + temp_s0 = &var_s5->unk_01C[0]; + if (temp_s0->unk_0C.y > 0.0f) { + temp_v0 = func_80005F5C(sizeof(Mtx) * 1); + guTranslate(temp_v0, temp_s0->unk_0C.x, temp_s0->unk_0C.y, temp_s0->unk_0C.z); + guRotateRPY(&sp100, (temp_s0->unk_08 * -360.0f * var_s5->unk_006) / 6.2831854820251465, + 0x5A - (var_s5->unk_006 * 0x5A), 0.0f); + guMtxCatL(&sp100, temp_v0, temp_v0); + guScale(&spC0, var_s5->unk_418, var_s5->unk_418, var_s5->unk_418); + guMtxCatL(&spC0, temp_v0, temp_v0); + + gSPMatrix(arg0++, temp_v0, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList(arg0++, D_8438A980); + gSPPopMatrix(arg0++, G_MTX_MODELVIEW); + } + + var_s5->unk_014 = func_80005F5C(sizeof(Vtx) * 30); + + var_s0 = var_s5->unk_014; + for (j = 0; j < 15; j++) { + func_84369BF0(temp_s0->unk_08, &sp154, temp_s0->unk_04); + + var_s3 = temp_s0->unk_0C.y + sp154.y; + if (var_s3 < 0) { + var_s3 = 0; + } + + var_s0->v.ob[0] = temp_s0->unk_0C.x + sp154.x; + var_s0->v.ob[1] = var_s3; + var_s0->v.ob[2] = temp_s0->unk_0C.z + sp154.z; + var_s0->v.cn[0] = var_s5->unk_008.r; + var_s0->v.cn[1] = var_s5->unk_008.g; + var_s0->v.cn[2] = var_s5->unk_008.b; + var_s0->v.cn[3] = temp_s0->unk_00; + var_s0++; + + func_84369BF0(temp_s0->unk_08 + 3.1415927f, &sp154, temp_s0->unk_04); + + var_s3 = temp_s0->unk_0C.y + sp154.y; + if (var_s3 < 0) { + var_s3 = 0; + } + + var_s0->v.ob[0] = temp_s0->unk_0C.x + sp154.x; + var_s0->v.ob[1] = var_s3; + var_s0->v.ob[2] = temp_s0->unk_0C.z + sp154.z; + var_s0->v.cn[0] = var_s5->unk_008.r; + var_s0->v.cn[1] = var_s5->unk_008.g; + var_s0->v.cn[2] = var_s5->unk_008.b; + var_s0->v.cn[3] = temp_s0->unk_00; + var_s0++; + + temp_s0++; + } + + var_s0 = var_s5->unk_014; + + gSPDisplayList(arg0++, D_84389A00); + + for (k = 0; k < 14; k++) { + gSPVertex(arg0++, var_s0, 4, 0); + gSP2Triangles(arg0++, 0, 2, 1, 0, 2, 3, 1, 0); + var_s0 += 2; + } + } + } + + return arg0; +} diff --git a/src/fragments/62/fragment62_354CD0.c b/src/fragments/62/fragment62_354CD0.c new file mode 100644 index 0000000..8eabd09 --- /dev/null +++ b/src/fragments/62/fragment62_354CD0.c @@ -0,0 +1,359 @@ +#include "fragment62.h" +#include "src/6A40.h" + +static unk_D_843ADA80 D_843ADA80[50]; + +static Gfx D_84389A50[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_1CYCLE), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_OFF), + gsDPPipeSync(), + gsDPSetRenderMode(G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetColorDither(G_CD_NOISE), + gsSPEndDisplayList(), +}; +static Vtx D_84389AA0[] = { + VTX(-6, 0, -6, 2048, 0, 0xFF, 0xFF, 0xFF, 0x14), + VTX(6, 0, -6, 0, 0, 0xFF, 0xFF, 0xFF, 0x14), + VTX(-6, 0, 6, 2048, 2048, 0xFF, 0xFF, 0xFF, 0x14), + VTX(6, 0, 6, 0, 2048, 0xFF, 0xFF, 0xFF, 0x14), +}; +Gfx D_84389AE0[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_1CYCLE), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), + gsDPPipeSync(), + gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsDPSetTexturePersp(G_TP_PERSP), + gsDPSetTextureLUT(G_TT_NONE), + gsDPSetTextureFilter(G_TF_BILERP), + gsDPPipeSync(), + gsSPVertex(D_84389AA0, 4, 0), + gsSP2Triangles(0, 1, 2, 0, 1, 3, 2, 0), + gsSPEndDisplayList(), +}; + +/* +static Vtx D_8438A858[] = { + VTX(1, -35, -35, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, -50, 0, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 0, 0, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, -50, 0, 0, 0, 0x1D, 0x8C, 0x00, 0xFF), + VTX(1, -35, -35, 0, 0, 0x1D, 0xAE, 0xAE, 0xFF), + VTX(200, 0, 0, 0, 0, 0x78, 0x00, 0x00, 0xFF), + VTX(1, 0, -49, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 0, -49, 0, 0, 0x1D, 0x00, 0x8C, 0xFF), + VTX(1, 35, -35, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 35, -35, 0, 0, 0x1D, 0x52, 0xAE, 0xFF), + VTX(1, 50, 0, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 50, 0, 0, 0, 0x1D, 0x74, 0x00, 0xFF), + VTX(1, 35, 35, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 35, 35, 0, 0, 0x1D, 0x52, 0x52, 0xFF), + VTX(1, 0, 49, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, 0, 49, 0, 0, 0x1D, 0x00, 0x74, 0xFF), + VTX(1, -35, 35, 0, 0, 0x88, 0x00, 0x00, 0xFF), + VTX(1, -35, 35, 0, 0, 0x1D, 0xAE, 0x52, 0xFF), +}; +static u32 D_8438A978[] = { + 0x77777777, + 0x77777777, +}; +static Gfx D_8438A980[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_1CYCLE), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR +| G_LOD | G_SHADING_SMOOTH | G_CLIPPING | 0x0040F9FA), gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | +G_LIGHTING | G_SHADING_SMOOTH), gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), gsDPPipeSync(), + gsDPLoadTextureBlock_4b(D_8438A978, G_IM_FMT_I, 4, 4, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 2, 2, +G_TX_NOLOD, G_TX_NOLOD), gsDPSetCombineMode(G_CC_BLENDIA, G_CC_BLENDIA), gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, +G_RM_AA_ZB_OPA_SURF2), gsDPSetPrimColor(0xFF, 0xFF, 197, 184, 122, 255), gsDPSetEnvColor(197, 184, 122, 255), + gsSPVertex(D_8438A858, 18, 0), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 5, 0), + gsSP2Triangles(6, 0, 2, 0, 4, 7, 5, 0), + gsSP2Triangles(8, 6, 2, 0, 7, 9, 5, 0), + gsSP2Triangles(10, 8, 2, 0, 9, 11, 5, 0), + gsSP2Triangles(12, 10, 2, 0, 11, 13, 5, 0), + gsSP2Triangles(14, 12, 2, 0, 13, 15, 5, 0), + gsSP2Triangles(16, 14, 2, 0, 15, 17, 5, 0), + gsSP2Triangles(1, 16, 2, 0, 17, 3, 5, 0), + gsSPEndDisplayList(), +}; +*/ + +void func_8436A410(void) { + unk_D_843ADA80* var_v0 = &D_843ADA80[0]; + unk_D_843ADA80_040* var_a0; + s32 i; + s32 j; + + for (i = 0; i < 50; i++, var_v0++) { + var_v0->unk_000 = 0; + var_v0->unk_004 = 0; + var_v0->unk_006 = 0; + + var_a0 = &var_v0->unk_040[0]; + + for (j = 0; j < 10; j++, var_a0++) { + var_a0->unk_00 = 0; + var_a0->unk_04 = 1.0f; + var_a0->unk_08 = 0.0f; + + var_a0->unk_0C.x = 0.0f; + var_a0->unk_0C.y = 0.0f; + var_a0->unk_0C.z = 0.0f; + var_a0->unk_18.x = 0.0f; + var_a0->unk_18.y = 0.0f; + var_a0->unk_18.z = 0.0f; + } + } +} + +void func_8436A540(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, + f32 argA, f32 argB, f32 argC, s16 argD) { + unk_D_843ADA80* var_v1; + unk_D_843ADA80_040* var_s0; + s32 i; + s32 j; + Vec3f sp7C; + Vec3f sp70; + Vec3f sp64; + f32 temp_fv1; + + temp_fv1 = func_8432FCD4() * 0.5f; + + sp7C.x = arg0; + sp7C.y = (80.0f * temp_fv1) + arg1; + sp7C.z = arg2; + + sp70.x = arg3; + sp70.y = arg4; + sp70.z = arg5; + + sp64.x = 0.0f; + sp64.y = temp_fv1 * -2.0; + sp64.z = 0.0f; + + var_v1 = &D_843ADA80[0]; + + for (i = 0; i < 50; i++, var_v1++) { + if (var_v1->unk_000 == 0) { + var_v1->unk_000 = 1; + var_v1->unk_002 = 0; + var_v1->unk_004 = 0; + var_v1->unk_006 = argD; + var_v1->unk_00A.r = arg6; + var_v1->unk_00A.g = arg7; + var_v1->unk_00A.b = arg8; + var_v1->unk_024 = sp7C; + var_v1->unk_014 = argC; + var_v1->unk_018 = argA; + var_v1->unk_010 = temp_fv1; + + if (arg0 > 0.0) { + var_v1->unk_008 = -1; + } else { + var_v1->unk_008 = 1; + } + + var_s0 = var_v1->unk_040; + for (j = 0; j < 10; j++, var_s0++) { + var_s0->unk_00 = (arg9 * (9 - j)) / 10; + var_s0->unk_04 = argB; + var_s0->unk_08 = (RAND(120) * 6.2831855f) / 120.0; + var_s0->unk_0C = sp7C; + var_s0->unk_18 = sp70; + var_s0->unk_24 = sp64; + } + break; + } + } +} + +void func_8436A808(f32 arg0, Vec3f* arg1, f32 arg2) { + MtxF sp30; + f32 temp_fv0 = (arg0 * 360.0) / 6.2831854820251465; + + guRotateRPYF(sp30.mf, 90.0f, temp_fv0, temp_fv0); + guMtxXFMF(sp30.mf, 0.0f, 0.0f, arg2, &arg1->x, &arg1->y, &arg1->z); +} + +void func_8436A890(unk_D_843ADA80* arg0) { + s32 i; + f32 temp_fs3 = arg0->unk_010; + unk_D_843ADA80_040* var_s0 = &arg0->unk_040[0]; + + for (i = 0; i < 10; i++, var_s0++) { + if (i == 0) { + var_s0->unk_30 = var_s0->unk_04; + var_s0->unk_34 = var_s0->unk_08; + var_s0->unk_38 = var_s0->unk_0C; + var_s0->unk_44 = var_s0->unk_18; + + switch (arg0->unk_002) { + case 0: + var_s0->unk_0C.x += var_s0->unk_24.x; + var_s0->unk_0C.y += var_s0->unk_24.y; + var_s0->unk_0C.z += var_s0->unk_24.z; + var_s0->unk_08 += arg0->unk_018; + var_s0->unk_24.x += __sinf(var_s0->unk_08) * temp_fs3; + var_s0->unk_24.z += __cosf(var_s0->unk_08) * temp_fs3; + if (arg0->unk_004 >= 0x15) { + arg0->unk_002 = 1; + arg0->unk_004 = 0; + } + break; + + case 1: + var_s0->unk_0C.x += var_s0->unk_18.x; + var_s0->unk_0C.y += var_s0->unk_18.y; + var_s0->unk_0C.z += var_s0->unk_18.z; + var_s0->unk_08 += arg0->unk_018; + if (arg0->unk_008 > 0) { + var_s0->unk_18.x += 2.0; + if (var_s0->unk_18.x > 20.0) { + var_s0->unk_18.x = 20.0f; + } + } else { + var_s0->unk_18.x -= 2.0; + if (var_s0->unk_18.x < -20.0) { + var_s0->unk_18.x = -20.0f; + } + } + break; + } + + var_s0->unk_04 += 2.0; + if (arg0->unk_014 < var_s0->unk_04) { + var_s0->unk_04 = arg0->unk_014; + } + } else { + var_s0->unk_30 = var_s0->unk_04; + var_s0->unk_34 = var_s0->unk_08; + + var_s0->unk_38 = var_s0->unk_0C; + var_s0->unk_44 = var_s0->unk_18; + + var_s0->unk_0C = var_s0[-1].unk_38; + var_s0->unk_08 = var_s0[-1].unk_34; + var_s0->unk_18 = var_s0[-1].unk_44; + var_s0->unk_04 = var_s0[-1].unk_30; + } + } +} + +s32 func_8436ABA8(void) { + s32 i; + unk_D_843ADA80* var_s0 = &D_843ADA80[0]; + + for (i = 0; i < 50; i++, var_s0++) { + if (var_s0->unk_000 == 1) { + var_s0->unk_004++; + if ((var_s0->unk_002 == 1) && (var_s0->unk_006 < var_s0->unk_004)) { + var_s0->unk_000 = 0; + } else { + func_8436A890(var_s0); + } + } + } + return 0; +} + +Gfx* func_8436AC44(Gfx* arg0) { + s32 i; + s32 j; + s32 k; + unk_D_843ADA80_040* temp_s0; + unk_D_843ADA80* var_s5; + Vtx* var_s0; + Vec3f sp184; + UNUSED s32 pad[15]; + Mtx* temp_v0; + Mtx sp100; + Mtx spC0; + f32 temp_fs1; + s16 var_s3; + f32 tmp; + + gDPLoadTextureBlock(arg0++, D_843920C0[0x1E], G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + + var_s5 = &D_843ADA80[0]; + for (i = 0; i < 50; i++, var_s5++) { + if (var_s5->unk_000 == 1) { + temp_s0 = &var_s5->unk_040[0]; + tmp = var_s5->unk_010; + if (temp_s0->unk_0C.y > 0.0f) { + temp_fs1 = (temp_s0->unk_08 * 360.0f) / 6.2831854820251465; + temp_v0 = func_80005F5C(sizeof(Mtx) * 1); + guTranslate(temp_v0, temp_s0->unk_0C.x, temp_s0->unk_0C.y, temp_s0->unk_0C.z); + guRotateRPY(&sp100, 90.0f, temp_fs1, temp_fs1); + guMtxCatL(&sp100, temp_v0, temp_v0); + guScale(&spC0, tmp, tmp, tmp); + guMtxCatL(&spC0, temp_v0, temp_v0); + + gSPMatrix(arg0++, temp_v0, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + gSPDisplayList(arg0++, D_84389AE0); + gSPPopMatrix(arg0++, G_MTX_MODELVIEW); + } + + var_s5->unk_020 = func_80005F5C(0x140); + + var_s0 = var_s5->unk_020; + for (j = 0; j < 10; j++) { + func_8436A808(temp_s0->unk_08, &sp184, temp_s0->unk_04 * tmp); + + var_s3 = temp_s0->unk_0C.y + sp184.y; + if (var_s3 < 0) { + var_s3 = 0; + } + + var_s0->v.ob[0] = temp_s0->unk_0C.x + sp184.x; + var_s0->v.ob[1] = var_s3; + var_s0->v.ob[2] = temp_s0->unk_0C.z + sp184.z; + var_s0->v.cn[0] = var_s5->unk_00A.r; + var_s0->v.cn[1] = var_s5->unk_00A.g; + var_s0->v.cn[2] = var_s5->unk_00A.b; + var_s0->v.cn[3] = temp_s0->unk_00; + var_s0++; + + func_8436A808(temp_s0->unk_08 + 3.1415927f, &sp184, temp_s0->unk_04 * tmp); + + var_s3 = temp_s0->unk_0C.y + sp184.y; + if (var_s3 < 0) { + var_s3 = 0; + } + + var_s0->v.ob[0] = temp_s0->unk_0C.x + sp184.x; + var_s0->v.ob[1] = var_s3; + var_s0->v.ob[2] = temp_s0->unk_0C.z + sp184.z; + var_s0->v.cn[0] = var_s5->unk_00A.r; + var_s0->v.cn[1] = var_s5->unk_00A.g; + var_s0->v.cn[2] = var_s5->unk_00A.b; + var_s0->v.cn[3] = temp_s0->unk_00; + var_s0++; + + temp_s0++; + } + + var_s0 = var_s5->unk_020; + + gSPDisplayList(arg0++, D_84389A50); + + for (k = 0; k < 9; k++) { + gSPVertex(arg0++, var_s0, 4, 0); + gSP2Triangles(arg0++, 0, 2, 1, 0, 2, 3, 1, 0); + var_s0 += 2; + } + } + } + + return arg0; +} diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index cb5a652..2b51f4e 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -2179,6 +2179,7 @@ - [0x352570, c, fragments/62/fragment62_352570] - [0x353370, c, fragments/62/fragment62_353370] - [0x3540B0, c, fragments/62/fragment62_3540B0] + - [0x354CD0, c, fragments/62/fragment62_354CD0] - [0x355A00, c, fragments/62/fragment62_355A00] - [0x356730, c, fragments/62/fragment62_356730] - [0x357C30, c, fragments/62/fragment62_357C30] @@ -2209,7 +2210,9 @@ - [0x374040, .data, fragments/62/fragment62_351F20] - [0x374170, .data, fragments/62/fragment62_352570] - [0x374270, .data, fragments/62/fragment62_353370] - - [0x3742C0, data, fragments/62/fragment62_data] + - [0x3742C0, .data, fragments/62/fragment62_3540B0] + - [0x374310, .data, fragments/62/fragment62_354CD0] + - [0x374420, data, fragments/62/fragment62_data] - [0x3759C0, .rodata, fragments/62/fragment62_2EC3C0] - [0x375A60, .rodata, fragments/62/fragment62_2F3CB0] @@ -2242,8 +2245,8 @@ - [0x378040, rodata, fragments/62/fragment62_rodata_378040] - [0x378070, .rodata, fragments/62/fragment62_352570] - [0x3780B0, .rodata, fragments/62/fragment62_353370] - - [0x378100, rodata, fragments/62/fragment62_rodata_378100] - - [0x378140, rodata, fragments/62/fragment62_rodata_378140] + - [0x378100, .rodata, fragments/62/fragment62_3540B0] + - [0x378140, .rodata, fragments/62/fragment62_354CD0] - [0x378170, rodata, fragments/62/fragment62_rodata_378170] - [0x3781A0, rodata, fragments/62/fragment62_rodata_3781A0] - [0x3781B0, rodata, fragments/62/fragment62_rodata_3781B0] @@ -2272,7 +2275,9 @@ - {vram: 0x843A22C0, type: .bss, name: fragments/62/fragment62_3512D0} - {vram: 0x843AA880, type: .bss, name: fragments/62/fragment62_352570} - {vram: 0x843AB940, type: .bss, name: fragments/62/fragment62_353370} - - {vram: 0x843ACA10, type: bss, name: fragments/62/fragment62_bss2} + - {vram: 0x843ACA10, type: .bss, name: fragments/62/fragment62_3540B0} + - {vram: 0x843ADA80, type: .bss, name: fragments/62/fragment62_354CD0} + - {vram: 0x843B8340, type: bss, name: fragments/62/fragment62_bss2} - name: fragment62_relocs type: code