From fac295437ca59fc3cf6bf2a4cf7fe1dc300a5897 Mon Sep 17 00:00:00 2001 From: Kelebek1 Date: Mon, 9 Jun 2025 16:09:07 +0100 Subject: [PATCH] 34F1A0 --- src/fragments/62/fragment62.h | 32 ++- src/fragments/62/fragment62_34F1A0.c | 393 ++++++++++++++++++++++++++- yamls/us/rom.yaml | 9 +- 3 files changed, 421 insertions(+), 13 deletions(-) diff --git a/src/fragments/62/fragment62.h b/src/fragments/62/fragment62.h index 4a68693..7e352f2 100644 --- a/src/fragments/62/fragment62.h +++ b/src/fragments/62/fragment62.h @@ -499,6 +499,28 @@ typedef struct unk_D_8439CA60 { /* 0x0014 */ unk_D_8439CA60_0014 unk_0014[16][16]; } unk_D_8439CA60; // size >= 0x1C14 +typedef struct unk_D_8439E680_0014 { + /* 0x00 */ f32 unk_00; + /* 0x04 */ f32 unk_04; + /* 0x08 */ f32 unk_08; + /* 0x0C */ f32 unk_0C; + /* 0x10 */ f32 unk_10; + /* 0x14 */ f32 unk_14; + /* 0x18 */ s16 unk_18; + /* 0x1A */ s16 unk_1A; + /* 0x1C */ f32 unk_1C; +} unk_D_8439E680_0014; // size = 0x20 + +typedef struct unk_D_8439E680 { + /* 0x0000 */ s16 unk_0000; + /* 0x0002 */ s16 unk_0002; + /* 0x0004 */ s16 unk_0004; + /* 0x0008 */ f32 unk_0008; + /* 0x000C */ Vtx* unk_000C; + /* 0x0010 */ Mtx* unk_0010; + /* 0x0014 */ unk_D_8439E680_0014 unk_0014[16][16]; +} unk_D_8439E680; // size >= 0x2014 + extern unk_D_8438E7B0* D_84384570[]; extern unk_D_8438FF70* D_84384578[]; extern unk_D_8438FF70* D_84384580[]; @@ -2492,9 +2514,15 @@ void func_84364304(void); Gfx* func_84364428(Gfx* arg0); -void func_84364A18(s32); +void func_843648E0(s16 arg0, s16 arg1); +void func_84364A18(s16 arg0); +void func_84364C50(s32 arg0, s32 arg1); +void func_843651D4(unk_D_8439E680_0014* arg0, Vtx* arg1); s32 func_84365288(void); -Gfx* func_84365558(Gfx*); +void func_84365434(void); +Gfx* func_84365558(Gfx* arg0); + + void func_84365A10(s32); s32 func_843661D0(void); Gfx* func_84366560(Gfx*); diff --git a/src/fragments/62/fragment62_34F1A0.c b/src/fragments/62/fragment62_34F1A0.c index b203bfa..1478826 100644 --- a/src/fragments/62/fragment62_34F1A0.c +++ b/src/fragments/62/fragment62_34F1A0.c @@ -1,15 +1,392 @@ -#include "global.h" +#include "fragment62.h" +#include "include/math.h" +#include "src/30640.h" +#include "src/6A40.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_843648E0.s") +static unk_D_8439E680 D_8439E680; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_84364A18.s") +static Lights2 D_84389430 = gdSPDefLights2(255, 255, 255, 255, 255, 255, 30, 30, 10, 255, 255, 255, 226, 30, 10); +static Gfx D_84389458[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_2CYCLE), + 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_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH), + gsSPSetLights2(D_84389430), + gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA2), + gsDPSetTexturePersp(G_TP_PERSP), + gsDPSetTextureLUT(G_TT_NONE), + gsDPSetTextureFilter(G_TF_BILERP), + gsDPSetRenderMode(G_RM_PASS, G_RM_XLU_SURF2), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_84364C50.s") +static Gfx D_843894D8[] = { + 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_OFF), + gsDPPipeSync(), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsDPSetTexturePersp(G_TP_PERSP), + gsDPSetTextureDetail(G_TD_CLAMP), + gsDPSetTextureLOD(G_TL_TILE), + gsDPSetTextureLUT(G_TT_NONE), + gsDPSetTextureConvert(G_TC_FILT), + gsDPSetTextureFilter(G_TF_BILERP), + gsDPSetColorDither(G_CD_NOISE), + gsDPSetRenderMode(G_RM_ZB_XLU_SURF, G_RM_ZB_XLU_SURF2), + gsSPEndDisplayList(), +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_843651D4.s") +void func_843648E0(s16 arg0, s16 arg1) { + unk_D_8439E680_0014* var_s0 = &D_8439E680.unk_0014[0][0]; + s32 i; + s32 j; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_84365288.s") + for (i = 0; i < 16; i++) { + s32 tmp1 = arg1 - i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_84365434.s") + for (j = 0; j < 16; j++) { + s32 tmp2 = arg0 - j; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/62/fragment62_34F1A0/func_84365558.s") + if ((tmp2 == 0.0f) && (tmp1 == (0, 0.0f))) { + var_s0->unk_1C += 1.5707963705062866; + } else { + var_s0->unk_1C += 1.5707963705062866 / sqrtf(SQ((f32)tmp2) + SQ((f32)tmp1)); + } + var_s0++; + } + } +} + +void func_84364A18(s16 arg0) { + s32 i; + s32 j; + s32 k; + s16 tmp1; + s16 tmp2; + unk_D_8439E680_0014* var_v0 = &D_8439E680.unk_0014[0][0]; + + D_8439E680.unk_0000 = 0; + D_8439E680.unk_0002 = arg0; + D_8439E680.unk_0004 = 0; + D_8439E680.unk_0008 = 0.01f; + + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + tmp1 = i * 0x20; + + var_v0->unk_00 = (i * 9.0f) - 72.0f; + + var_v0->unk_1C = 0.0f; + var_v0->unk_04 = (__sinf(var_v0->unk_1C) * 0.5) + 1.0; + + tmp2 = j * 0x20; + + var_v0->unk_08 = (j * 7.0f) - 56.0f; + + var_v0->unk_18 = tmp1 * 0x10; + var_v0->unk_1A = tmp2 * 0x10; + + var_v0++; + } + } + + func_843648E0(8, 8); + + for (k = 0; k < 10; k++) { + s16 rand1 = RAND(16); + s16 rand2 = RAND(16); + func_843648E0(rand1, rand2); + } + + var_v0 = &D_8439E680.unk_0014[0][0]; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + var_v0->unk_04 = (__sinf(var_v0->unk_1C) * 0.5) + 1.0; + var_v0++; + } + } +} + +void func_84364C50(s32 arg0, s32 arg1) { + f32 sp84; + f32 sp80; + f32 sp7C; + f32 sp78; + f32 sp74; + f32 sp70; + f32 sp6C; + f32 sp68; + f32 sp64; + f32 sp60; + f32 sp5C; + f32 sp58; + f32 sp54; + f32 sp50; + f32 sp4C; + UNUSED s32 pad; + s16 sp46; + + sp6C = D_8439E680.unk_0014[arg0][arg1].unk_00; + sp68 = D_8439E680.unk_0014[arg0][arg1].unk_04; + sp64 = D_8439E680.unk_0014[arg0][arg1].unk_08; + sp84 = 0.0f; + sp80 = 0.0f; + sp7C = 0.0f; + sp46 = 0; + + if ((arg0 > 0) && (arg1 >= 1)) { + sp60 = D_8439E680.unk_0014[arg0 - 1][arg1].unk_00 - sp6C; + sp5C = D_8439E680.unk_0014[arg0 - 1][arg1].unk_04 - sp68; + sp58 = D_8439E680.unk_0014[arg0 - 1][arg1].unk_08 - sp64; + func_80031B04(&sp60, &sp5C, &sp58); + sp54 = D_8439E680.unk_0014[arg0][arg1 - 1].unk_00 - sp6C; + sp50 = D_8439E680.unk_0014[arg0][arg1 - 1].unk_04 - sp68; + sp4C = D_8439E680.unk_0014[arg0][arg1 - 1].unk_08 - sp64; + func_80031B04(&sp54, &sp50, &sp4C); + func_80031A94(sp60, sp5C, sp58, sp54, sp50, sp4C, &sp78, &sp74, &sp70); + func_80031B04(&sp78, &sp74, &sp70); + sp84 += sp78; + sp80 += sp74; + sp7C += sp70; + sp46 = 1; + } + + if ((0 < arg0) && (arg1 < 15)) { + sp60 = D_8439E680.unk_0014[arg0 - 1][arg1].unk_00 - sp6C; + sp5C = D_8439E680.unk_0014[arg0 - 1][arg1].unk_04 - sp68; + sp58 = D_8439E680.unk_0014[arg0 - 1][arg1].unk_08 - sp64; + func_80031B04(&sp60, &sp5C, &sp58); + sp54 = D_8439E680.unk_0014[arg0][arg1 + 1].unk_00 - sp6C; + sp50 = D_8439E680.unk_0014[arg0][arg1 + 1].unk_04 - sp68; + sp4C = D_8439E680.unk_0014[arg0][arg1 + 1].unk_08 - sp64; + func_80031B04(&sp54, &sp50, &sp4C); + func_80031A94(sp60, sp5C, sp58, sp54, sp50, sp4C, &sp78, &sp74, &sp70); + func_80031B04(&sp78, &sp74, &sp70); + sp84 += sp78; + sp80 += sp74; + sp7C += sp70; + sp46 += 1; + } + + if ((arg0 < 15) && (arg1 >= 1)) { + sp60 = D_8439E680.unk_0014[arg0 + 1][arg1].unk_00 - sp6C; + sp5C = D_8439E680.unk_0014[arg0 + 1][arg1].unk_04 - sp68; + sp58 = D_8439E680.unk_0014[arg0 + 1][arg1].unk_08 - sp64; + func_80031B04(&sp60, &sp5C, &sp58); + sp54 = D_8439E680.unk_0014[arg0][arg1 - 1].unk_00 - sp6C; + sp50 = D_8439E680.unk_0014[arg0][arg1 - 1].unk_04 - sp68; + sp4C = D_8439E680.unk_0014[arg0][arg1 - 1].unk_08 - sp64; + func_80031B04(&sp54, &sp50, &sp4C); + func_80031A94(sp60, sp5C, sp58, sp54, sp50, sp4C, &sp78, &sp74, &sp70); + func_80031B04(&sp78, &sp74, &sp70); + sp84 += sp78; + sp80 += sp74; + sp7C += sp70; + sp46 += 1; + } + + if ((arg0 < 15) && (arg1 < 15)) { + sp60 = D_8439E680.unk_0014[arg0 + 1][arg1].unk_00 - sp6C; + sp5C = D_8439E680.unk_0014[arg0 + 1][arg1].unk_04 - sp68; + sp58 = D_8439E680.unk_0014[arg0 + 1][arg1].unk_08 - sp64; + func_80031B04(&sp60, &sp5C, &sp58); + sp54 = D_8439E680.unk_0014[arg0][arg1 + 1].unk_00 - sp6C; + sp50 = D_8439E680.unk_0014[arg0][arg1 + 1].unk_04 - sp68; + sp4C = D_8439E680.unk_0014[arg0][arg1 + 1].unk_08 - sp64; + func_80031B04(&sp54, &sp50, &sp4C); + func_80031A94(sp60, sp5C, sp58, sp54, sp50, sp4C, &sp78, &sp74, &sp70); + func_80031B04(&sp78, &sp74, &sp70); + sp84 -= sp78; + sp80 -= sp74; + sp7C -= sp70; + sp46 += 1; + } + + if (sp46 != 0) { + if ((sp84 == 0.0) && (sp80 == 0.0) && (sp7C == 0.0)) { + sp80 = 1.0f; + } else { + func_80031B04(&sp84, &sp80, &sp7C); + } + D_8439E680.unk_0014[arg0][arg1].unk_0C = sp84; + D_8439E680.unk_0014[arg0][arg1].unk_10 = sp80; + D_8439E680.unk_0014[arg0][arg1].unk_14 = sp7C; + } +} + +void func_843651D4(unk_D_8439E680_0014* arg0, Vtx* arg1) { + f32 r; + f32 g; + f32 b; + + arg1->v.ob[0] = arg0->unk_00; + arg1->v.ob[1] = arg0->unk_04; + arg1->v.ob[2] = arg0->unk_08; + + arg1->v.tc[0] = arg0->unk_18; + arg1->v.tc[1] = arg0->unk_1A; + + r = arg0->unk_0C; + g = arg0->unk_10; + b = arg0->unk_14; + + arg1->v.cn[0] = (s32)(r * 120.0); + arg1->v.cn[1] = (s32)(g * 120.0); + arg1->v.cn[2] = (s32)(b * 120.0); + arg1->v.cn[3] = D_8439E680.unk_0004; +} + +s32 func_84365288(void) { + unk_D_8439E680_0014* var_s1; + s32 i; + s32 j; + + D_8439E680.unk_0000 = D_8439E680.unk_0000 + 1; + if (D_8439E680.unk_0002 < D_8439E680.unk_0000) { + return -1; + } + if (D_8439E680.unk_0000 < 0x1E) { + D_8439E680.unk_0004 += 0xA; + if (D_8439E680.unk_0004 >= 0x81) { + D_8439E680.unk_0004 = 0x80; + } + } else if ((D_8439E680.unk_0002 - 0x1E) < D_8439E680.unk_0000) { + D_8439E680.unk_0004 -= 0xA; + if (D_8439E680.unk_0004 < 0) { + D_8439E680.unk_0004 = 0; + } + } + + if (D_8439E680.unk_0008 < 0.5) { + D_8439E680.unk_0008 += 0.05; + } + + var_s1 = &D_8439E680.unk_0014[0][0]; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + var_s1->unk_04 = (__sinf(var_s1->unk_1C) * 0.5) + 1.0; + var_s1->unk_1C += 0.1; + + var_s1++; + } + } + + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + func_84364C50(i, j); + } + } + + return 0; +} + +void func_84365434(void) { + unk_D_86002F34_00C* temp_v0; + f32 tmp1; + f32 tmp2; + f32 tmp3; + f32 tmp4; + f32 tmp5; + f32 tmp6; + f32 sp68; + f32 sp64; + f32 sp60; + f32 sp5C; + f32 temp_fa0; + f32 temp_fa1; + f32 temp_fv0; + f32 temp_fv1; + + D_8439E680.unk_0010 = func_80005F5C(sizeof(Mtx) * 1); + temp_v0 = func_8432FD64(); + + tmp4 = temp_v0->unk_60.at.x; + tmp5 = temp_v0->unk_60.at.y; + tmp6 = temp_v0->unk_60.at.z; + + tmp1 = temp_v0->unk_60.eye.x; + tmp2 = temp_v0->unk_60.eye.y; + tmp3 = temp_v0->unk_60.eye.z; + + sp5C = temp_v0->unk_24.fovy; + sp68 = tmp4 - tmp1; + sp64 = tmp5 - tmp2; + sp60 = tmp6 - tmp3; + + func_80031B04(&sp68, &sp64, &sp60); + + temp_fv0 = sp5C / 30.0f; + temp_fv1 = (140.0f * sp68) / temp_fv0; + temp_fa0 = (140.0f * sp64) / temp_fv0; + temp_fa1 = (140.0f * sp60) / temp_fv0; + + tmp4 += temp_fv1; + tmp5 += temp_fa0; + tmp6 += temp_fa1; + + tmp1 += temp_fv1; + tmp2 += temp_fa0; + tmp3 += temp_fa1; + + func_80031C6C(D_8439E680.unk_0010, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6); +} + +Gfx* func_84365558(Gfx* arg0) { + s32 i; + s32 j; + unk_D_8439E680_0014* var_s2; + s32 var_s4; + Vtx* vtx; + s32 idx; + + var_s4 = 0; + D_8439E680.unk_000C = func_80005F5C(sizeof(Vtx) * 16 * 16); + + vtx = D_8439E680.unk_000C; + var_s2 = &D_8439E680.unk_0014[0][0]; + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + func_843651D4(var_s2, vtx); + var_s2++; + vtx++; + } + } + + func_84365434(); + + gDPLoadTextureBlock(arg0++, D_843920C0[0x48], 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); + gSPDisplayList(arg0++, D_84389458); + gDPSetPrimColor(arg0++, 0, 0, 255, 255, 255, D_8439E680.unk_0004); + gSPMatrix(arg0++, D_8439E680.unk_0010, G_MTX_PUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + vtx = D_8439E680.unk_000C; + for (i = 0; i < 15; i++) { + for (j = 0; j < 15; j++) { + idx = (i + 0) * 16 + j; + + gSPVertex(arg0++, &vtx[idx + 0], 1, 0); + gSPVertex(arg0++, &vtx[idx + 1], 1, 1); + gSPVertex(arg0++, &vtx[((i + 1) * 16 + j) + (0 * 16) + 0], 1, 2); + gSPVertex(arg0++, &vtx[idx + (1 * 16) + 1], 1, 3); + + if (!(var_s4 & 1)) { + gSP2Triangles(arg0++, 1, 2, 0, 0, 1, 3, 2, 0); + } else { + gSP2Triangles(arg0++, 3, 2, 0, 0, 1, 3, 0, 0); + } + + var_s4++; + } + } + + gSPPopMatrix(arg0++, G_MTX_MODELVIEW); + return arg0; +} diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index 63b3b0a..a04f7ad 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -2203,7 +2203,8 @@ - [0x372B40, .data, fragments/62/fragment62_347330] - [0x373920, .data, fragments/62/fragment62_34A420] - [0x373BC0, .data, fragments/62/fragment62_34E1A0] - - [0x373CF0, data, fragments/62/fragment62_data] + - [0x373CF0, .data, fragments/62/fragment62_34F1A0] + - [0x373E20, data, fragments/62/fragment62_data] - [0x3759C0, .rodata, fragments/62/fragment62_2EC3C0] - [0x375A60, .rodata, fragments/62/fragment62_2F3CB0] @@ -2230,7 +2231,8 @@ - [0x377DA0, .rodata, fragments/62/fragment62_347330] - [0x377E40, .rodata, fragments/62/fragment62_34A420] - [0x377FA0, .rodata, fragments/62/fragment62_34E1A0] - - [0x377FC0, rodata, fragments/62/fragment62_rodata_377FC0] + - [0x377FC0, .rodata, fragments/62/fragment62_34F1A0] + - [0x377FE0, rodata, fragments/62/fragment62_rodata_377FE0] - [0x378000, rodata, fragments/62/fragment62_rodata_378000] - [0x378040, rodata, fragments/62/fragment62_rodata_378040] - [0x3780B0, rodata, fragments/62/fragment62_rodata_3780B0] @@ -2258,7 +2260,8 @@ - {vram: 0x843925E0, type: .bss, name: fragments/62/fragment62_347330} - {vram: 0x84397610, type: .bss, name: fragments/62/fragment62_34A420} - {vram: 0x8439CA60, type: .bss, name: fragments/62/fragment62_34E1A0} - - {vram: 0x8439E680, type: bss, name: fragments/62/fragment62_bss2} + - {vram: 0x8439E680, type: .bss, name: fragments/62/fragment62_34F1A0} + - {vram: 0x843A06A0, type: bss, name: fragments/62/fragment62_bss2} - name: fragment62_relocs type: code