Merge pull request #254 from Jameriquiah/match-func_87903920

match `func_87903920`
This commit is contained in:
Revo
2026-08-13 10:26:53 -04:00
committed by GitHub

View File

@@ -81,152 +81,111 @@ void func_879038AC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s
sp34->unk_000.unk_000.unk_14 = 2;
}
#ifdef NON_MATCHING
Gfx* func_87903920(Gfx* arg0, arg1_func_87903D64_014* arg1) {
s32 sp38;
s32 sp34;
s32 sp30;
Gfx* func_87903920(Gfx* gfx, arg1_func_87903D64_014* arg1) {
u8 tmp1;
u8 tmp2;
u8 tmp3;
u8 tmp4;
u8 tmp5;
u8 tmp6;
u8 tmp7;
u8 tmp8;
u8 tmp9;
u32 sp38;
u32 sp34;
u32 sp30;
unk_D_86002F34_000_014_004* sp2C;
unk_D_86002F34_000_014_004* sp28;
unk_D_86002F34_000_014_010* sp24;
unk_D_86002F34_000_014_010* sp20;
s32 temp_a2;
UNUSED s32 temp_t1;
UNUSED s32 temp_t1_2;
UNUSED s32 temp_t2;
UNUSED s32 temp_t2_2;
UNUSED s32 temp_t2_3;
UNUSED s32 temp_t4;
s32 var_a0;
s32 var_v1;
u32 pad;
u32 temp_a2;
u32 temp_a3;
u32 var_v0;
UNUSED u8* temp_t1_3;
UNUSED u8* temp_v1;
unk_D_86002F34_000_014_004* var_a1;
unk_D_86002F34_000_014_004* var_a2;
unk_D_86002F34_000_014_010* var_a3;
unk_D_86002F34_000_014_010* var_t0;
u32 tmp1;
u32 tmp2;
u32 tmp3;
u32 tmp4;
u32 tmp5;
u32 tmp6;
u32 tmp7;
u32 tmp8;
u32 tmp9;
temp_a2 = D_8006F09C->unk_000.unk_14;
temp_a3 = (D_8006F09C->unk_040.unk_08 >> 0x10) + 1;
switch (arg1->unk_00) {
default:
var_a0 = sp34;
var_v1 = sp38;
var_v0 = sp30;
break;
pad = arg1->unk_00;
switch (pad) {
case 1:
if (temp_a3 < 0xF) {
var_v1 = 0;
var_v0 = (temp_a3 << 8) / 15;
var_a0 = 1;
sp38 = 0;
sp34 = 1;
sp30 = (temp_a3 << 8) / 15;
} else if (temp_a3 < 0x1D) {
var_v1 = 1;
var_v0 = ((temp_a3 << 8) - 0xF00) / 14;
var_a0 = 2;
sp38 = 1;
sp34 = 2;
sp30 = ((temp_a3 << 8) - 0xF00) / 14;
} else {
var_v1 = 2;
var_a0 = 2;
var_v0 = 0;
sp38 = 2;
sp34 = 2;
sp30 = 0;
}
break;
case 2:
if (temp_a3 < 5) {
var_v1 = 0;
var_v0 = (temp_a3 << 8) / 5;
var_a0 = 1;
sp38 = 0;
sp34 = 1;
sp30 = (temp_a3 << 8) / 5;
} else if (temp_a3 < 0xF) {
var_v1 = 1;
var_v0 = ((temp_a3 << 8) - 0x500) / 10;
var_a0 = 2;
sp38 = 1;
sp34 = 2;
sp30 = ((temp_a3 << 8) - 0x500) / 10;
} else if (temp_a3 < 0x1D) {
var_v1 = 2;
var_v0 = ((temp_a3 << 8) - 0xF00) / 14;
var_a0 = 3;
sp38 = 2;
sp34 = 3;
sp30 = ((temp_a3 << 8) - 0xF00) / 14;
} else {
var_v1 = 3;
var_a0 = 3;
var_v0 = 0;
sp38 = 3;
sp34 = 3;
sp30 = 0;
}
break;
}
switch (temp_a2) {
default:
var_t0 = sp20;
var_a3 = sp24;
var_a2 = sp28;
var_a1 = sp2C;
break;
case 0:
var_a3 = &arg1->unk_10[var_v1];
var_t0 = &arg1->unk_10[var_a0];
var_a1 = &arg1->unk_04[var_v1];
var_a2 = &arg1->unk_04[var_a0];
sp2C = &arg1->unk_04[sp38];
sp28 = &arg1->unk_04[sp34];
sp24 = &arg1->unk_10[sp38];
sp20 = &arg1->unk_10[sp34];
break;
case 1:
var_a3 = &arg1->unk_14[var_v1];
var_t0 = &arg1->unk_14[var_a0];
var_a1 = &arg1->unk_08[var_v1];
var_a2 = &arg1->unk_08[var_a0];
sp2C = &arg1->unk_08[sp38];
sp28 = &arg1->unk_08[sp34];
sp24 = &arg1->unk_14[sp38];
sp20 = &arg1->unk_14[sp34];
break;
case 2:
var_a3 = &arg1->unk_18[var_v1];
var_t0 = &arg1->unk_18[var_a0];
var_a1 = &arg1->unk_0C[var_v1];
var_a2 = &arg1->unk_0C[var_a0];
sp2C = &arg1->unk_0C[sp38];
sp28 = &arg1->unk_0C[sp34];
sp24 = &arg1->unk_18[sp38];
sp20 = &arg1->unk_18[sp34];
break;
}
gDPPipeSync(arg0++);
tmp5 = ((var_a1->unk_00[4] * (0x100 - var_v0)) + (var_a2->unk_00[4] * var_v0)) >> 8;
tmp1 = ((var_a1->unk_00[0] * (0x100 - var_v0)) + (var_a2->unk_00[0] * var_v0));
tmp1 >>= 8;
tmp2 = ((var_a1->unk_00[1] * (0x100 - var_v0)) + (var_a2->unk_00[1] * var_v0));
tmp2 >>= 8;
tmp3 = ((var_a1->unk_00[2] * (0x100 - var_v0)) + (var_a2->unk_00[2] * var_v0));
tmp3 >>= 8;
tmp4 = ((var_a1->unk_00[3] * (0x100 - var_v0)) + (var_a2->unk_00[3] * var_v0));
tmp4 >>= 8;
tmp1 = ((sp28->unk_00[0] * sp30) + (sp2C->unk_00[0] * (0x100 - sp30))) >> 8;
tmp2 = ((sp28->unk_00[1] * sp30) + (sp2C->unk_00[1] * (0x100 - sp30))) >> 8;
tmp3 = ((sp28->unk_00[2] * sp30) + (sp2C->unk_00[2] * (0x100 - sp30))) >> 8;
tmp4 = ((sp28->unk_00[3] * sp30) + (sp2C->unk_00[3] * (0x100 - sp30))) >> 8;
tmp5 = ((sp28->unk_00[4] * sp30) + (sp2C->unk_00[4] * (0x100 - sp30))) >> 8;
tmp6 = ((var_a3->unk_00[0] * (0x100 - var_v0)) + (var_t0->unk_00[0] * var_v0));
tmp6 >>= 8;
tmp7 = ((var_a3->unk_00[1] * (0x100 - var_v0)) + (var_t0->unk_00[1] * var_v0));
tmp7 >>= 8;
tmp8 = ((var_a3->unk_00[2] * (0x100 - var_v0)) + (var_t0->unk_00[2] * var_v0));
tmp8 >>= 8;
tmp9 = ((var_a3->unk_00[3] * (0x100 - var_v0)) + (var_t0->unk_00[3] * var_v0));
tmp9 >>= 8;
tmp6 = ((sp20->unk_00[0] * sp30) + (sp24->unk_00[0] * (0x100 - sp30))) >> 8;
tmp7 = ((sp20->unk_00[1] * sp30) + (sp24->unk_00[1] * (0x100 - sp30))) >> 8;
tmp8 = ((sp20->unk_00[2] * sp30) + (sp24->unk_00[2] * (0x100 - sp30))) >> 8;
tmp9 = ((sp20->unk_00[3] * sp30) + (sp24->unk_00[3] * (0x100 - sp30))) >> 8;
gDPSetPrimColor(arg0++, 0, tmp5, tmp1, tmp2, tmp3, tmp4);
gDPPipeSync(gfx++);
gDPSetPrimColor(gfx++, 0, tmp5, tmp1, tmp2, tmp3, tmp4);
gDPSetEnvColor(gfx++, tmp6, tmp7, tmp8, tmp9);
gDPSetEnvColor(arg0++, tmp1, tmp2, tmp3, tmp4);
return arg0;
return gfx;
}
#else
#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/3/fragment3_11BF90/func_87903920.s")
#endif
void func_87903D64(s32 arg0, arg1_func_87903D64* arg1) {
if (arg0 == 5) {