diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index a244601..54b7d4f 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -1399,6 +1399,34 @@ D_84386D34 = 0x84386D34; // type:u8 D_84386D38 = 0x84386D38; // type:u8 D_84386D3C = 0x84386D3C; // type:u8 D_84386D40 = 0x84386D40; // type:u8 +D_81003FE0 = 0x81003FE0; // defined:true size:0xD8 +D_81004160 = 0x81004160; // defined:true size:0xC +pad_D_8100416C = 0x8100416C; // defined:true size:0x4 +D_86A06200 = 0x86A06200; // defined:true size:0x4 +pad_D_86A06204 = 0x86A06204; // defined:true size:0xC +D_86A06210 = 0x86A06210; // defined:true size:0x1 +D_86A06211 = 0x86A06211; // defined:true size:0x1 +D_86A06212 = 0x86A06212; // defined:true size:0x2 +D_86A06214 = 0x86A06214; // defined:true size:0x4 +D_86A06218 = 0x86A06218; // defined:true size:0x4 +D_8100419C = 0x8100419C; // defined:true size:0x18 +D_810041D0 = 0x810041D0; // defined:true size:0x40 +D_81004210 = 0x81004210; // defined:true size:0x4 +D_81004214 = 0x81004214; // defined:true size:0x4 +D_81004218 = 0x81004218; // defined:true size:0x4 +D_8100421C = 0x8100421C; // defined:true size:0x4 +D_810047D0 = 0x810047D0; // defined:true size:0x8 +D_810047D8 = 0x810047D8; // defined:true size:0x4 +D_810047DC = 0x810047DC; // defined:true size:0x4 +D_810047E0 = 0x810047E0; // size:0x370 +D_81004B54 = 0x81004B54; // defined:true size:0x4 +D_81004B60 = 0x81004B60; // defined:true size:0x2 +D_81004B70 = 0x81004B70; // defined:true size:0x4 +D_81004B80 = 0x81004B80; // defined:true size:0x4 +D_81004B90 = 0x81004B90; // defined:true size:0x4 +D_81004BA0 = 0x81004BA0; // defined:true size:0x4 +D_81004BB0 = 0x81004BB0; // defined:true size:0x4 +D_81004BB8 = 0x81004BB8; // defined:true size:0x28 D_8140E628 = 0x8140E628; // size:0x8C D_8140E720 = 0x8140E720; // size:0x4 D_8140E724 = 0x8140E724; // size:0x4 diff --git a/src/fragments/31/fragment31.h b/src/fragments/31/fragment31.h index 00a14f3..1a24503 100644 --- a/src/fragments/31/fragment31.h +++ b/src/fragments/31/fragment31.h @@ -15,24 +15,16 @@ typedef struct DisplayListState { /* 0x18 */ Gfx* gfx; } DisplayListState; // size = 0x1C -typedef struct unk_arg0_func_81002174 { - /* 0x00 */ s8 unk_00; - /* 0x01 */ s8 unk_01; - /* 0x02 */ s8 unk_02; - /* 0x03 */ s8 unk_03; - /* 0x04 */ s8 unk_04; - /* 0x05 */ s8 unk_05; - /* 0x06 */ s8 unk_06; -} unk_arg0_func_81002174; // size >= 0x7 - typedef struct unk_arg0_func_81002260 { /* 0x00 */ char unk00[0x1A]; /* 0x1A */ s16 unk_1A; } unk_arg0_func_81002260; // size >= 0x1C +extern const Gfx D_810041D0[]; + void func_810007A8(unk_D_86002F58_004_000*); void func_810007F8(void); -void func_81002174(unk_D_83402EE0_00A*); -void func_81002260(unk_arg0_func_81002260*, unk_arg0_func_81002174*); +void func_81002174(u8*); +void func_81002260(unk_arg0_func_81002260*, u8*); #endif // _FRAGMENT31_H_ diff --git a/src/fragments/31/fragment31_2554C0.c b/src/fragments/31/fragment31_2554C0.c index 8473bda..b2e8d14 100644 --- a/src/fragments/31/fragment31_2554C0.c +++ b/src/fragments/31/fragment31_2554C0.c @@ -4,6 +4,25 @@ #include "src/32D10.h" #include "src/334D0.h" +const char D_810041C0[0xC] = "DUMMY NAME"; +const char D_810041CC[0x4] = ""; + +const Gfx D_810041D0[] = { + gsDPPipeSync(), + gsDPSetCycleType(G_CYC_2CYCLE), + gsDPSetTextureLUT(G_TT_NONE), + gsSPLoadGeometryMode(0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_LIGHTING | G_SHADING_SMOOTH), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0, COMBINED, 0, PRIM_LOD_FRAC, 0, 0, 0, 0, COMBINED), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsSPEndDisplayList(), +}; + +const char D_81004210[0x4] = "A"; +const char D_81004214[0x4] = ""; +const char D_81004218[0x4] = ""; +const char D_8100421C[0x4] = ""; + Gfx* func_81000200(Gfx* gfx, DisplayListAddresses* addresses, s32 index) { gSPDisplayList(gfx++, addresses->segments[0]); // TODO: Convert to gDPLoadTextureBlock diff --git a/src/fragments/31/fragment31_2558B0.c b/src/fragments/31/fragment31_2558B0.c index f76f768..3d0a01c 100644 --- a/src/fragments/31/fragment31_2558B0.c +++ b/src/fragments/31/fragment31_2558B0.c @@ -20,36 +20,76 @@ typedef struct unk_arg2_func_81001D80 { } unk_arg2_func_81001D80; // size = 0xC typedef struct unk_D_81003FE0 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ s32 unk_08; + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; + /* 0x04 */ s16 unk_04; + /* 0x06 */ s16 unk_06; + /* 0x08 */ s16 unk_08; + /* 0x0A */ s16 unk_0A; } unk_D_81003FE0; // size = 0xC -extern unk_D_81003FE0 D_81003FE0[]; -extern unk_D_81003FE0 D_81003FE2[]; -extern unk_D_81003FE0 D_81003FEA[]; -extern s16 D_810040B8[18]; -extern unk_D_810047E0 D_810047E0[2][10]; -extern unk_D_810047E0 D_81004998[2][10]; -extern s32 D_81004B50; -extern s32 D_81004B54; -extern s16 D_81004B60; -extern f32 D_810040DC[12]; -extern Vec3f D_81004160; -extern s32 D_81004170; +typedef struct unk_D_81004160 { + /* 0x00 */ f32 x; + /* 0x04 */ f32 y; + /* 0x08 */ f32 z; + /* 0x0C */ u32 unk_0C; +} unk_D_81004160; // size = 0x10 + +// .data +unk_D_81003FE0 D_81003FE0[18] = { + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0024, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0024, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0024, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0020, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0024, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x002C, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, + { 0x0024, 0x0041, 0x0008, 0x0026, 0x0060, 0x0073 }, +}; +s16 D_810040B8[18] = { + 0x0011, 0x0007, 0x0006, 0x0005, 0x0004, 0x0003, 0x0002, 0x0001, 0x0000, + 0x0010, 0x000F, 0x000E, 0x000D, 0x000C, 0x000B, 0x000A, 0x0009, 0x0008, +}; +f32 D_810040DC[12] = { + 0.5f, 0.6499999762f, 0.8000000119f, 0.9499999881f, 0.875f, 0.8000000119f, + 0.7250000238f, 0.6499999762f, 0.5749999881f, 0.5f, 0.4250000119f, 0.349999994f, +}; +Vec3f D_8100410C = { 0.0f, 0.0f, 0.0f }; +Vec3f D_81004118 = { 0.0f, 0.0f, 0.0f }; +Vec3f D_81004124 = { 1.0f, 1.0f, 1.0f }; +Vec3f D_81004130 = { 2.0f, 2.0f, 2.0f }; +Vec3f D_8100413C = { 0.0f, 10.0f, 0.0f }; +Vec3f D_81004148 = { 10000.0f, 10000.0f, 10000.0f }; +Vec3f D_81004154 = { -10000.0f, -10000.0f, -10000.0f }; +Vec3f D_81004160 = { 1.0f, 1.0f, 1.0f }; +static u32 pad_D_8100416C = 0; + +// .bss +static unk_D_810047E0 D_810047E0[2][10]; +static s32 D_81004B50; +static s32 D_81004B54; + -// Matching, just needs data to be done -#ifdef NON_MATCHING void func_810005F0(unk_D_86002F58_004_000* arg0, s32 arg1) { u8 var_v0 = arg0->unk_0A6; s32 pad[2]; - Vec3f sp50 = { 0.0f, 0.0f, 0.0f }; - Vec3f sp44 = { 0.0f, 0.0f, 0.0f }; - Vec3f sp38 = { 1.0f, 1.0f, 1.0f }; - Vec3f sp2C = { 2.0f, 2.0f, 2.0f }; - Vec3f sp20 = { 0.0f, 10.0f, 0.0f }; - Vec3f sp14 = { 10000.0f, 10000.0f, 10000.0f }; - Vec3f sp8 = { -10000.0f, -10000.0f, -10000.0f }; + Vec3f sp50 = D_8100410C; + Vec3f sp44 = D_81004118; + Vec3f sp38 = D_81004124; + Vec3f sp2C = D_81004130; + Vec3f sp20 = D_8100413C; + Vec3f sp14 = D_81004148; + Vec3f sp8 = D_81004154; if (var_v0 == 0xFF) { var_v0 = 0; @@ -63,9 +103,6 @@ void func_810005F0(unk_D_86002F58_004_000* arg0, s32 arg1) { D_810047E0[var_v0 & 1][arg1].velocity = sp44; D_810047E0[var_v0 & 1][arg1].scale = sp38; } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_810005F0.s") -#endif void func_810007A8(unk_D_86002F58_004_000* arg0) { s32 i; @@ -80,159 +117,124 @@ void func_810007F8(void) { D_81004B54 = 0; } -#ifdef NON_MATCHING void func_8100080C(unk_D_810047E0* arg0) { - s32 var_s1; + s32 var_v0; Vec3f sp90; Vec3f sp84; Vec3f sp78; - Vec3f sp64; - f32 sp60; - f32 sp58; - f32 temp_fa1; - f32 temp_ft5; - f32 temp_fv0; + s32 var_s1; f32 temp_fv0_2; + Vec3f sp64 = D_81004160; + f32 sp60; f32 sp5C; - f32 temp_fv1; + f32 sp58; + u32 pad[2]; f32 var_fs0; - f32 var_ft4; - f32 var_ft5; - f32 var_fv1; - s32 var_v0; - unk_D_810047E0* var_s0; - var_s0 = arg0; var_s1 = 0xA; - sp64.x = D_81004160.x; - sp64.y = D_81004160.y; - sp64.z = D_81004160.z; guMtxXFMF(func_800123D4(-1)->mf, 0, 0, 0, &sp90.x, &sp90.y, &sp90.z); guMtxXFMF(func_800123D4(0)->mf, 0, 0, 0, &sp84.x, &sp84.y, &sp84.z); - temp_fv1 = D_8006F09C->unk_030.x; + sp60 = D_8006F09C->unk_030.x; sp5C = D_8006F09C->unk_030.y; sp58 = D_8006F09C->unk_030.z; switch (D_8006F09C->unk_01A) { case 0x6D: case 0x6E: var_fs0 = 0.5f; - sp64.x = 0x3F800000; - sp64.y = 0x3F800000; - sp64.z = 0x3F800000; + sp64.x = 1.0f; + sp64.y = 1.0f; + sp64.z = 1.0f; break; case 0x92: var_fs0 = 1.0f; - sp60 = temp_fv1; - sp64.x = 0x3DCCCCCD; - sp64.y = 0x3DCCCCCD; - sp64.z = 0x3DCCCCCD; - sp84.x += (f32) ((guRandom() % 10) - 5) * temp_fv1; + sp64.x = 0.1f; + sp64.y = 0.1f; + sp64.z = 0.1f; + sp84.x += (f32) ((guRandom() % 10) - 5) * sp60; sp84.y += (f32) ((guRandom() % 10) - 5) * sp5C; sp84.z += (f32) ((guRandom() % 10) - 5) * sp58; break; case 0x4D: var_fs0 = 0.5f; - sp60 = temp_fv1; - sp64.x = 0x3B03126F; - sp64.y = 0x3B03126F; - sp64.z = 0x3B03126F; - sp84.x += (f32) ((guRandom() % 20) - 0xA) * temp_fv1; + sp64.x = 0.002f; + sp64.y = 0.002f; + sp64.z = 0.002f; + sp84.x += (f32) ((guRandom() % 20) - 0xA) * sp60; sp84.y += (f32) ((guRandom() % 20) - 0xA) * sp5C; sp84.z += (f32) ((guRandom() % 20) - 0xA) * sp58; break; case 0x4E: var_fs0 = 0.5f; - sp60 = temp_fv1; - sp64.x = 0x3B03126F; - sp64.y = 0x3B03126F; - sp64.z = 0x3B03126F; - sp84.x += (f32) ((guRandom() % 20) - 0xA) * temp_fv1; + sp64.x = 0.002f; + sp64.y = 0.002f; + sp64.z = 0.002f; + sp84.x += (f32) ((guRandom() % 20) - 0xA) * sp60; sp84.y += (f32) ((guRandom() % 10) - 5) * sp5C; sp84.z += (f32) ((guRandom() % 20) - 0xA) * sp58; break; case 0x90: var_fs0 = 0.0f; - sp60 = temp_fv1; sp64.x = D_810040DC[0]; - sp64.y = D_810040DC[1]; - sp64.z = D_810040DC[2]; - sp84.x += (f32) ((guRandom() % 20) - 0xA) * temp_fv1; + sp64.y = D_810040DC[0]; + sp64.z = D_810040DC[0]; + sp84.x += (f32) ((guRandom() % 20) - 0xA) * sp60; sp84.y += (f32) ((guRandom() % 20) - 0xA) * sp5C; sp84.z += (f32) ((guRandom() % 20) - 0xA) * sp58; break; case 0x86: var_fs0 = 0.0f; - sp60 = temp_fv1; sp64.x = D_810040DC[0]; - sp64.y = D_810040DC[1]; - sp64.z = D_810040DC[2]; - sp84.x += (f32) ((guRandom() % 60) - 0x1E) * temp_fv1; + sp64.y = D_810040DC[0]; + sp64.z = D_810040DC[0]; + sp84.x += (f32) ((guRandom() % 60) - 0x1E) * sp60; sp84.y += (f32) ((guRandom() % 40) - 0xA) * sp5C; sp84.z += (f32) ((guRandom() % 60) - 0x1E) * sp58; break; case 0x5C: var_fs0 = 0.0f; var_s1 = 3; - sp64.x = 0x41A00000; - sp64.y = 0x41A00000; - sp64.z = 0x41A00000; + sp64.x = 20.0f; + sp64.y = 20.0f; + sp64.z = 20.0f; break; default: var_fs0 = 0.0f; break; } - var_v0 = 0; -loop_11: - var_v0 += 1; - if (var_v0 < var_s1) { - if (var_s0->active == 0) { - temp_fv0 = sp84.x - sp90.x; - temp_ft5 = sp84.y - sp90.y; - sp78.x = temp_fv0; - temp_fa1 = sp84.z - sp90.z; - sp78.y = temp_ft5; - sp78.z = temp_fa1; - temp_fv0_2 = sqrtf((temp_fv0 * temp_fv0) + (temp_ft5 * temp_ft5) + (temp_fa1 * temp_fa1)); - var_fv1 = sp78.z; - var_ft4 = sp78.x; - var_ft5 = temp_ft5; + for (var_v0 = 0; var_v0 < 10; var_v0++) { + if (var_v0 >= var_s1) { + break; + } + if (arg0->active == 0) { + sp78.x = sp84.x - sp90.x; + sp78.y = sp84.y - sp90.y; + sp78.z = sp84.z - sp90.z; + temp_fv0_2 = sqrtf((sp78.x * sp78.x) + (sp78.y * sp78.y) + (sp78.z * sp78.z)); if (temp_fv0_2 > 0.0f) { - var_ft4 /= temp_fv0_2; - var_ft5 /= temp_fv0_2; - var_fv1 /= temp_fv0_2; + sp78.x /= temp_fv0_2; + sp78.y /= temp_fv0_2; + sp78.z /= temp_fv0_2; } - var_s0->velocity.x = (f32) (var_fs0 * var_ft4); - var_s0->velocity.y = (f32) (var_fs0 * var_ft5); - var_s0->velocity.z = (f32) (var_fs0 * var_fv1); - var_s0->position.x = sp84.x; - var_s0->position.y = sp84.y; - var_s0->position.z = sp84.z; - var_s0->scale.x = sp64.x; - var_s0->scale.y = sp64.y; - var_s0->scale.z = sp64.z; - var_s0->misc = 0; - var_s0->active = 1; - return; - } - var_s0 += 0x2C; - if (var_v0 == 0xA) { - - } else { - goto loop_11; + arg0->velocity.x = (f32) (var_fs0 * sp78.x); + arg0->velocity.y = (f32) (var_fs0 * sp78.y); + arg0->velocity.z = (f32) (var_fs0 * sp78.z); + arg0->position = sp84; + arg0->scale = sp64; + arg0->misc = 0; + arg0->active = 1; + break; } + arg0++; } } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_8100080C.s") -#endif -#ifdef NON_MATCHING void func_81000E78(unk_D_810047E0* arg0) { - s16 temp_a0; - unk_D_81003FE0* var_v1; + s32 pad[1]; s16 temp_v1; s32 var_a1; + s16 temp_a0; s32 var_v0; + s16* var_v1; var_a1 = D_8006F09C->unk_040.unk_08 >> 0x10; switch (D_8006F09C->unk_01A) { @@ -240,35 +242,36 @@ void func_81000E78(unk_D_810047E0* arg0) { case 0x6E: temp_v1 = D_8006F09C->unk_040.unk_00; temp_a0 = D_810040B8[D_81004B54 % 18]; - if (temp_v1 != 2) { - var_v0 = 0; - if (temp_v1 != 3) { - if (temp_v1 == 4) { - if (var_a1 == D_81003FE2[temp_a0].unk_00) { - func_8100080C(arg0); - return; - } - } else if (var_a1 == D_81003FE0[temp_a0].unk_00) { - func_8100080C(arg0); - return; - } - } else { - var_v1 = &D_81003FE0[temp_a0]; - do { - if (var_a1 == var_v1->unk_04) { - func_8100080C(arg0); - } - var_v0 += 2; - var_v1 += 2; - } while (var_v0 != 6); - return; - } - } else { - if (var_a1 == D_81003FEA[temp_a0].unk_00) { + switch(temp_v1) { + case 4: + if (var_a1 == D_81003FE0[temp_a0].unk_02) { func_8100080C(arg0); return; } + break; + case 3: + var_v0 = 0; + var_v1 = &D_81003FE0[temp_a0].unk_00; + do { + if (var_a1 == var_v1[2]) { + func_8100080C(arg0); + } + var_v0 += 2; + var_v1 ++; + } while (var_v0 != 6); + return; + break; + case 2: + if (var_a1 == D_81003FE0[temp_a0].unk_0A) { + func_8100080C(arg0); + return; + } + break; default: + if (var_a1 == D_81003FE0[temp_a0].unk_00) { + func_8100080C(arg0); + return; + } return; } break; @@ -301,9 +304,6 @@ void func_81000E78(unk_D_810047E0* arg0) { break; } } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_81000E78.s") -#endif Gfx* func_810010BC(Gfx*, unk_D_810047E0*, unk_arg2_func_81001D80*, s16); #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_810010BC.s") @@ -321,93 +321,104 @@ Gfx* func_81001D80(Gfx* gfx, unk_D_810047E0* arg1, unk_arg2_func_81001D80* arg2, #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_81001E24.s") -#ifdef NON_MATCHING -void func_81002174(unk_D_83402EE0_00A* arg0) { +void func_81002174(u8* arg0) { s32 i; s16 var_a1; s16 var_a2; s16 var_a3; + s16 var_t0; + s16 var_t1; + s16 var_t2; u8 var_a0; u8 var_v0; - for (i = 0; i != 10; ) { + for (i = 0; i < 10; i++) { if (D_810047E0[0][i].active == 1) { var_v0 = 0x80; var_a0 = D_810047E0[0][i].misc & 0x7F; var_a1 = D_810047E0[0][i].position.x * 10.0f; var_a2 = D_810047E0[0][i].position.y * 10.0f; var_a3 = D_810047E0[0][i].position.z * 10.0f; + var_t0 = D_810047E0[0][i].velocity.x * 10.0f; + var_t1 = D_810047E0[0][i].velocity.y * 10.0f; + var_t2 = D_810047E0[0][i].velocity.z * 10.0f; } else { var_v0 = 0; var_a0 = 0; var_a1 = 0; var_a2 = 0; var_a3 = 0; + var_t0 = 0; + var_t1 = 0; + var_t2 = 0; } + + if (var_t0) {} + if (var_t1) {} + if (var_t2) {} - arg0->unk_00[0] = ((var_v0 & 0x80) | (var_a0 & 0x7F)); - i++; - arg0->unk_00[1] = var_a1; - arg0->unk_00[2] = (var_a1 >> 8); - arg0->unk_00[3] = var_a2; - arg0->unk_00[4] = (var_a2 >> 8); - arg0->unk_00[5] = var_a3; - arg0->unk_00[6] = (var_a3 >> 8); - arg0 += 1; + *arg0++ = (((var_v0 & 0xFF & 0xFF) & 0x80) | (var_a0 & 0x7F)); + *arg0++ = var_a1 & 0xFF; + *arg0++ = (var_a1 >> 8) & 0xFF; + *arg0++ = var_a2 & 0xFF; + *arg0++ = (var_a2 >> 8) & 0xFF; + *arg0++ = var_a3 & 0xFF; + *arg0++ = (var_a3 >> 8) & 0xFF; } - - // FAKE - Stops unroll - i = 0; } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_81002174.s") -#endif -#ifdef NON_MATCHING -void func_81002260(unk_arg0_func_81002260* arg0, unk_arg0_func_81002174* arg1) { - unk_D_810047E0* temp_v0; +void func_81002260(unk_arg0_func_81002260* arg0, u8* arg1) { + unk_D_810047E0* var_v1; f32 var_fv0; s16 var_a2; s16 var_t0; + s16 var_a0; + u16 temp_t1; + u16 temp_t2; + u16 temp_t3; + s32 temp_a3; s32 temp_a0; - s32 var_a0; s32 i; - u8 temp_a3; - unk_arg0_func_81002174* temp_a1; for (i = 0; i < 10; i++) { - temp_a3 = arg1->unk_00; - temp_a1 = arg1 + 1; - if (!(temp_a3 & 0x80)) { - D_810047E0[0][i].active = 0; + var_v1 = &D_810047E0[0][i]; + temp_a0 = *arg1 & 0x80; + temp_a3 = *arg1++; + if (!temp_a0) { + var_v1->active = 0; var_a0 = 0; var_a2 = 0; var_t0 = 0; - arg1 = temp_a1 + 6; + arg1 += 6; } else { - D_810047E0[0][i].active = 1; - temp_a0 = ((arg1->unk_01 | (temp_a1->unk_01 << 8)) & 0xFFFF) << 0x10; - arg1 = temp_a1 + 6; - var_a0 = temp_a0 >> 0x10; - var_a2 = (temp_a1->unk_02 | (temp_a1->unk_03 << 8)) & 0xFFFF; - var_t0 = (temp_a1->unk_04 | (temp_a1->unk_05 << 8)) & 0xFFFF; + var_v1->active = 1; + temp_t1 = (*arg1++); + temp_t1 |= ((*arg1++) << 8); + temp_t2 = (*arg1++); + temp_t2 |= ((*arg1++) << 8); + temp_t3 = (*arg1++); + temp_t3 |= ((*arg1++) << 8); + var_a0 = temp_t1; + var_a2 = temp_t2; + var_t0 = temp_t3; } - D_810047E0[0][i].misc = (s16) (temp_a3); + temp_a3 &= 0x7F; + var_v1->misc = temp_a3; switch (arg0->unk_1A) { case 0x92: - var_fv0 = ((f32) D_810047E0[0][i].misc * 0.005f) + 0.1f; + var_fv0 = ((f32) var_v1->misc * 0.005f) + 0.1f; break; case 0x4D: case 0x4E: - var_fv0 = ((f32) D_810047E0[0][i].misc * 0.005f) + 0.002f; + var_fv0 = ((f32) var_v1->misc * 0.005f) + 0.002f; break; case 0x86: case 0x90: - var_fv0 = D_810040DC[D_810047E0[0][i].misc % 12]; + var_fv0 = D_810040DC[var_v1->misc % 12]; break; case 0x6D: case 0x6E: - var_fv0 = ((f32) D_810047E0[0][i].misc * 0.1f) + 1.0f; + var_fv0 = ((f32) var_v1->misc * 0.1f) + 1.0f; break; case 0x5C: var_fv0 = 20.0f; @@ -415,16 +426,13 @@ void func_81002260(unk_arg0_func_81002260* arg0, unk_arg0_func_81002174* arg1) { default: var_fv0 = 1.0f; break; - } - // var_v1 += 0x2C; - temp_v0->scale.x = var_fv0; - temp_v0->scale.y = var_fv0; - temp_v0->scale.z = var_fv0; - temp_v0->position.x = (f32) ((f32) var_a0 / 10.0f); - temp_v0->position.y = (f32) ((f32) var_a2 / 10.0f); - temp_v0->position.z = (f32) ((f32) var_t0 / 10.0f); + } + + var_v1->scale.x = var_fv0; + var_v1->scale.y = var_fv0; + var_v1->scale.z = var_fv0; + var_v1->position.x = var_a0 / 10.0f; + var_v1->position.y = var_a2 / 10.0f; + var_v1->position.z = var_t0 / 10.0f; }; } -#else -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_2558B0/func_81002260.s") -#endif diff --git a/src/fragments/31/fragment31_2577F0.c b/src/fragments/31/fragment31_2577F0.c index 3c7cffd..029bd18 100644 --- a/src/fragments/31/fragment31_2577F0.c +++ b/src/fragments/31/fragment31_2577F0.c @@ -3,8 +3,16 @@ #include "12D80.h" #include "6A40.h" -extern s32 D_81004170; -extern s16 D_81004B60; +// .data +static Gfx D_81004170[] = { + gsDPPipeSync(), + gsDPSetCombineLERP(TEXEL1, TEXEL0, ENV_ALPHA, TEXEL0, TEXEL1, TEXEL0, ENVIRONMENT, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, PRIM_LOD_FRAC, 0), + gsDPSetEnvColor(0xFF, 0xFF, 0xFF, 0x64), + gsSPEndDisplayList(), +}; + +// .bss +static s16 D_81004B60; #ifdef NON_MATCHING void func_81002530(Gfx* gfx, DisplayListAddresses* addresses) { diff --git a/src/fragments/31/fragment31_258080.c b/src/fragments/31/fragment31_258080.c index 8b42fc4..41f2600 100644 --- a/src/fragments/31/fragment31_258080.c +++ b/src/fragments/31/fragment31_258080.c @@ -9,19 +9,19 @@ typedef struct { /* 0x00 */ u8 rgb0[3]; // start color /* 0x03 */ u8 frameStart; // frame where this keyframe begins - /* 0x04 */ u8 rgb1[3]; // end color - /* 0x07 */ u8 frameEnd; // frame where keyframe ends -} Keyframe; // size = 0x08 +} Keyframe; // size = 0x04 -extern Keyframe* D_8100419C[]; -extern s32 D_810041D0[20]; -extern char D_810047D0[3]; -extern s32 D_81004B70; -extern s32 D_81004B80; -extern s32 D_81004B90; -extern s32 D_81004BA0; -extern s32 D_81004BB0; -extern char D_81004BB8[0x28]; +// .bss +static s32 D_81004B70; +static u8 pad_D_81004B78[0x8]; +static s32 D_81004B80; +static u8 pad_D_81004B88[0x8]; +static s32 D_81004B90; +static u8 pad_D_81004B98[0x8]; +static s32 D_81004BA0; +static u8 pad_D_81004BA8[0x8]; +static s32 D_81004BB0; +static char D_81004BB8[0x28]; void func_81002DC0(Gfx* gfx, u16* arg1, u8* arg2) { gDPPipeSync(gfx++); @@ -131,8 +131,6 @@ void func_81003538(s32 arg0, DisplayListState* state) { } } -#ifdef NON_MATCHING -// Matching, needs more data void func_810035C0(s32 arg0, DisplayListState* state) { static u8 D_81004190 = 0; s32 temp_a1; @@ -150,70 +148,54 @@ void func_810035C0(s32 arg0, DisplayListState* state) { D_81004190 &= 0x7F; } } -#else -void func_810035C0(s32, DisplayListState*); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_258080/func_810035C0.s") -#endif -#ifdef NON_MATCHING void func_81003678(s32 arg0, DisplayListState* state) { static u8 D_81004194 = 0; static u8 D_81004198 = 0; + static Keyframe D_8100419C[6] = { + { { 0xFF, 0x32, 0x32 }, 0 }, + { { 0xC8, 0xC8, 0x00 }, 10 }, + { { 0x64, 0xFF, 0x00 }, 20 }, + { { 0x00, 0xC8, 0xFF }, 30 }, + { { 0x96, 0x32, 0xC8 }, 40 }, + { { 0xFF, 0x32, 0x32 }, 50 }, + }; + u8 i; + u8 c; Keyframe* kf; Gfx* gfx; - u8 rgbInterp[3]; - f32 var_ft2; - s32 temp_a3_2; - s32 temp_t1_2; - s32 i; - s32 c; - u8 start; - u8 span; - u8 delta; - u8 t; + u8 sp48[3]; if (arg0 == 2) { - gfx = func_80005F5C(0x20); + gfx = func_80005F5C(sizeof(Gfx) * 4); state->gfx = gfx; for (i = 0; i < 5; i++) { - kf = D_8100419C[i]; - if (D_81004198 == kf->frameStart) { + if (D_81004198 == D_8100419C[i].frameStart) { for(c = 0; c < 3; c++) { - rgbInterp[c] = kf->rgb0[c]; + sp48[c] = D_8100419C[i].rgb0[c]; } - } else if (kf->frameStart < D_81004198 && D_81004198 < kf->frameEnd) { - span = (kf->frameEnd - kf->frameStart); - t = D_81004198 - kf->frameStart; + break; + } + if (D_8100419C[i].frameStart < D_81004198 && D_81004198 < D_8100419C[i + 1].frameStart) { for(c = 0; c < 3; c++) { - start = kf->rgb0[c]; - var_ft2 = (f32) start; - if ((s32) start < 0) { - var_ft2 += 4294967296.0f; - } - delta = (kf->rgb1[c] - start); - rgbInterp[c] = (var_ft2 + ((f32) (delta * t) / (f32) span) + 0.5f); + sp48[c] = (s32) (((f32) ((D_8100419C[i + 1].rgb0[c] - D_8100419C[i].rgb0[c]) * (D_81004198 - D_8100419C[i].frameStart)) / (f32) (D_8100419C[i + 1].frameStart - D_8100419C[i].frameStart)) + D_8100419C[i].rgb0[c] + 0.5f); } + break; } } - temp_a3_2 = D_81004194 * -2; - temp_t1_2 = D_81004194 * 2; - // set prim color? - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xFA000080; _gfx->words.w1 = ((rgbInterp[2] << 8) | (rgbInterp[1] << 0x18) | (rgbInterp[0] << 0x10) | 0xB4); } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = (((temp_a3_2 & 0xFFF) << 0xC) | 0xF2000000); _gfx->words.w1 = ((((0x13F << (temp_a3_2 + 2)) & 0xFFF) << 0xC) | 0xFC); } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = (((temp_t1_2 & 0xFFF) << 0xC) | 0xF2000000); _gfx->words.w1 = ((((0x13F << (temp_t1_2 + 2)) & 0xFFF) << 0xC) | 0x01000000 | 0xFC); } + gDPSetPrimColor(gfx++, 0, 0x80, sp48[0], sp48[1], sp48[2], 180); + gDPSetTileSize(gfx++, 0, -2 * D_81004194, 0, (320 - 1) << ((-2 * D_81004194) + 2), (64 - 1) << 2); + gDPSetTileSize(gfx++, 1, 2 * D_81004194, 0, (320 - 1) << ((2 * D_81004194) + 2), (64 - 1) << 2); gSPEndDisplayList(gfx++); D_81004194++; D_81004194 &= 0x7F; D_81004198++; + D_81004198 &= 0xFF; if ((s32) D_81004198 >= 0x32) { D_81004198 = 0; } } } -#else -void func_81003678(s32, DisplayListState*); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_258080/func_81003678.s") -#endif void func_810038D0(Gfx* gfx) { s32 temp_a3; @@ -251,44 +233,42 @@ s32 func_81003A24(s8* arg0) { #ifdef NON_MATCHING void func_81003A54(Gfx* gfx) { + u16 temp_v1; u8 sp4D; + s32 pad[3]; + u8 var_v0 = D_8006F09C->unk_0A6 % 5; + u32 temp_t0; char* sp34; Mtx* sp30; s32 sp2C; - u8 temp_t0; - u8 var_v1; - temp_t0 = D_800AF770[(D_8006F09C->unk_0A6 % 5) & 0xFF]; + temp_t0 = D_800AF770[var_v0]; switch (D_81004BB0) { case 0: - var_v1 = (((s32) (temp_t0 + 1) / 100) + 0x10) & 0xFF; + sp4D = (((s32) (temp_t0 + 1) / 100) + 0x10) & 0xFF; break; case 1: - var_v1 = (((s32) ((s32) (temp_t0 + 1) % 100) / 10) + 0x10) & 0xFF; + sp4D = (((s32) ((s32) (temp_t0 + 1) % 100) / 10) + 0x10) & 0xFF; break; case 2: - var_v1 = (((s32) (temp_t0 + 1) % 10) + 0x10) & 0xFF; + sp4D = (((s32) (temp_t0 + 1) % 10) + 0x10) & 0xFF; break; default: - sp34 = func_8002D7C0(0, 0, D_8267E760, temp_t0);; - sprintf(D_81004BB8, D_810047D0, sp34); - sp4D = func_8001E730((u8) D_81004BB8[(D_81004BB0 - 3) & 0xFFFF]); + { + sp34 = func_8002D7C0(0, 0, D_8267E760, (u32)(u64)(u32)(u64)(u32)(u64)(u32)temp_t0); + sprintf(D_81004BB8, "%s ", sp34); + temp_v1 = D_81004BB0 - 3; + sp4D = func_8001E730((u8) D_81004BB8[temp_v1]); sp2C = 0xA - func_81003A24((s8*)sp34); - sp30 = func_80005F5C(0x40);; + sp30 = func_80005F5C(sizeof(Mtx)); guTranslate(sp30, (f32) sp2C * 32.0f, 0.0f, 0.0f); - var_v1 = sp4D; - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xDA380001; _gfx->words.w1 = sp30; } + gSPMatrix(gfx++, sp30, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); break; + } } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xFD6800FF; _gfx->words.w1 = Util_ConvertAddrToVirtAddr(D_3000000[((var_v1 & 0xF) * 0x10) + (((s32) (var_v1 & 0xF0) >> 4) << 0xC)]); } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xF5680600; _gfx->words.w1 = 0x07094250; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xE6000000; _gfx->words.w1 = 0; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xF4000000; _gfx->words.w1 = 0x07040040; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xE7000000; _gfx->words.w1 = 0; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xF5680600; _gfx->words.w1 = 0x94250; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xF2000000; _gfx->words.w1 = 0x40040; } - { Gfx *_gfx = (Gfx *)(gfx++); _gfx->words.w0 = 0xDF000000; _gfx->words.w1 = 0; } - D_81004BB0 += 1; + gDPLoadTextureTile(gfx++, Util_ConvertAddrToVirtAddr(D_3000000 + (((sp4D & 0xF) << 4)) + (((((sp4D & 0xF0) & 0xFF) >> 4) << 0xC))), G_IM_FMT_IA, G_IM_SIZ_8b, 256, 17, 0, 0, 16, 16, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 5, 5, G_TX_NOLOD, G_TX_NOLOD); + gSPEndDisplayList(gfx++); + D_81004BB0++; } #else #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/31/fragment31_258080/func_81003A54.s") diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index 74aa88b..0b490db 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -1419,13 +1419,16 @@ - [0x259030, c, fragments/31/fragment31_259030] - [0x2590C0, c, fragments/31/fragment31_2590C0] - [0x259290, .data, fragments/31/fragment31_2554C0] - - [0x2592A0, data, fragments/31/fragment31_data] - - [0x259480, rodata, fragments/31/fragment31_rodata_259480] - - [0x259490, rodata, fragments/31/fragment31_rodata_259490] + - [0x2592A0, .data, fragments/31/fragment31_2558B0] + - [0x259430, .data, fragments/31/fragment31_2577F0] + - [0x259450, .data, fragments/31/fragment31_258080] + - [0x259480, .rodata, fragments/31/fragment31_2554C0] - [0x2594E0, .rodata, fragments/31/fragment31_2558B0] - - [0x259A90, rodata, fragments/31/fragment31_rodata_259A90] + - [0x259A90, .rodata, fragments/31/fragment31_258080] - - {vram: 0x810047E0, type: bss, name: fragments/31/fragment31_bss} + - {vram: 0x810047E0, type: .bss, name: fragments/31/fragment31_2558B0} + - {vram: 0x81004B60, type: .bss, name: fragments/31/fragment31_2577F0} + - {vram: 0x81004B70, type: .bss, name: fragments/31/fragment31_258080} - name: fragment31_relocs type: code @@ -1525,7 +1528,7 @@ - [0x271260, textbin, fragments/35/fragment35_header] - [0x271280, c, fragments/35/fragment35] - - {vram: 0x82000560, type: bss, name: fragments/35/fragment35_bss} + - {vram: 0x82000560, type: .bss, name: fragments/35/fragment35} - name: fragment35_relocs type: code