This commit is contained in:
Kelebek1 2025-06-09 16:09:07 +01:00
parent 31bac4ad4c
commit fac295437c
3 changed files with 421 additions and 13 deletions

View File

@ -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*);

View File

@ -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;
}

View File

@ -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