Merge pull request #259 from dplewis/fragment-31-matches

Map `fragment31` and `fragment35` data
This commit is contained in:
Revo
2026-08-13 13:22:40 -04:00
committed by GitHub
7 changed files with 328 additions and 290 deletions

View File

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

View File

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

View File

@@ -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] = "";
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

View File

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

View File

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

View File

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

View File

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