mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 05:56:00 -04:00
feat(decomp): ox wave cv overlays — 9 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
@@ -94,7 +94,7 @@ extern s32 D_800EC6A4;
|
||||
extern s32 D_800EC690;
|
||||
extern u8 D_800DA48C[];
|
||||
extern void func_800CF3E8(void);
|
||||
extern s32 func_800CFC1C(u8 *arg0);
|
||||
extern s32 func_800CFC1C();
|
||||
extern void func_800118AC(void);
|
||||
|
||||
void func_800CF078(void) {
|
||||
@@ -230,7 +230,131 @@ void func_800CFB3C(u16 *arg0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800CFC1C);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_800599B8();
|
||||
|
||||
s32 func_800CFC1C(u16 *param_1)
|
||||
{
|
||||
extern s32 D_800EC69C;
|
||||
|
||||
u8 buf[0x10];
|
||||
register u16 *cursor __asm__("$18");
|
||||
register s32 uVar13 __asm__("$16");
|
||||
register u16 *psVar14 __asm__("$17");
|
||||
register s32 uVar16 __asm__("$19");
|
||||
register u32 mask __asm__("$20");
|
||||
register u16 *puVar9 __asm__("$11");
|
||||
register u16 *puVar10 __asm__("$12");
|
||||
register s32 iVar11 __asm__("$13");
|
||||
u16 tag;
|
||||
u32 result;
|
||||
u16 stored;
|
||||
s32 gate;
|
||||
register u32 acc __asm__("$2");
|
||||
register u32 uVar5 __asm__("$7");
|
||||
register u32 uVar7 __asm__("$6");
|
||||
register u32 uVar1 __asm__("$4");
|
||||
register u32 uVar6 __asm__("$3");
|
||||
register u32 uVar8 __asm__("$8");
|
||||
register u32 uVar3 __asm__("$10");
|
||||
|
||||
cursor = param_1;
|
||||
uVar16 = 0;
|
||||
D_800EC69C = D_800EC69C + 1;
|
||||
gate = D_800EC69C < 2;
|
||||
if (gate) {
|
||||
return (u16 *)gate;
|
||||
}
|
||||
__asm__ __volatile__("" : "=r"(cursor) : "0"(cursor));
|
||||
tag = *(u16 *)cursor;
|
||||
D_800EC69C = 0;
|
||||
if (tag != 0xff) {
|
||||
mask = -0x8000;
|
||||
psVar14 = param_1 + 5;
|
||||
do {
|
||||
iVar11 = 0;
|
||||
if (tag == 9) {
|
||||
uVar13 = 0;
|
||||
puVar10 = *(u16 **)(psVar14 + 1);
|
||||
{
|
||||
register s32 boff __asm__("$2") = (s32)((s16 *)psVar14)[-1] * 2;
|
||||
register u16 *pi __asm__("$5");
|
||||
pi = (u16 *)((s32)puVar10 + boff);
|
||||
__asm__ __volatile__("" : "=r"(pi) : "0"(pi));
|
||||
puVar9 = pi;
|
||||
}
|
||||
if (0 < (s32)((s16 *)psVar14)[-1]) {
|
||||
do {
|
||||
register u32 pix __asm__("$2");
|
||||
register u32 out __asm__("$9");
|
||||
pix = (u32)*puVar9;
|
||||
out = (u32)*puVar10;
|
||||
uVar5 = pix & 0x1f;
|
||||
uVar7 = pix & 0x3e0;
|
||||
uVar1 = pix & 0x7c00;
|
||||
uVar6 = out & 0x1f;
|
||||
uVar8 = out & 0x3e0;
|
||||
uVar3 = out & 0x7c00;
|
||||
if (uVar5 != uVar6) {
|
||||
register s32 c __asm__("$2");
|
||||
uVar13 = 1;
|
||||
if ((s32)uVar5 < (s32)uVar6) uVar5 = uVar5 + 1;
|
||||
c = (s32)uVar6 < (s32)uVar5;
|
||||
if (c) uVar5 = uVar5 - 1;
|
||||
}
|
||||
if (uVar7 != uVar8) {
|
||||
register s32 c __asm__("$2");
|
||||
uVar13 = 1;
|
||||
if ((s32)uVar7 < (s32)uVar8) uVar7 = uVar7 + 0x20;
|
||||
c = (s32)uVar8 < (s32)uVar7;
|
||||
if (c) uVar7 = uVar7 - 0x20;
|
||||
}
|
||||
if (uVar1 != uVar3) {
|
||||
register s32 c __asm__("$2");
|
||||
uVar13 = 1;
|
||||
if ((s32)uVar1 < (s32)uVar3) uVar1 = uVar1 + 0x400;
|
||||
c = (s32)uVar3 < (s32)uVar1;
|
||||
if (c) uVar1 = uVar1 - 0x400;
|
||||
}
|
||||
acc = uVar5 | uVar7;
|
||||
result = acc | uVar1 | (out & mask);
|
||||
stored = result;
|
||||
if ((stored & 0xFFFF) == 0 && out != 0) {
|
||||
stored = result | 0x8000;
|
||||
}
|
||||
*puVar9 = stored;
|
||||
puVar9 = puVar9 + 1;
|
||||
iVar11 = iVar11 + 1;
|
||||
puVar10 = puVar10 + 1;
|
||||
} while (iVar11 < (s32)((s16 *)psVar14)[-1]);
|
||||
}
|
||||
if (uVar13 != 0) {
|
||||
register u8 *argp __asm__("$4");
|
||||
argp = buf;
|
||||
*(u16 *)(buf + 0) = psVar14[-3];
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*(u16 *)(buf + 2) = psVar14[-2];
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*(u16 *)(buf + 4) = psVar14[-1];
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*(u16 *)(buf + 6) = psVar14[0];
|
||||
func_800599B8(argp);
|
||||
}
|
||||
uVar16 = uVar16 | uVar13;
|
||||
}
|
||||
cursor = cursor + 8;
|
||||
psVar14 = psVar14 + 8;
|
||||
tag = *(u16 *)cursor;
|
||||
} while (tag != 0xff);
|
||||
}
|
||||
return (u16 *)uVar16;
|
||||
}
|
||||
|
||||
|
||||
extern s16 D_800EC678;
|
||||
extern void func_800599B8(u16 *, u16 *);
|
||||
|
||||
@@ -143,7 +143,41 @@ void func_800CB190(void *arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_033/nonmatchings/md_MAIN_033", func_800CB2C8);
|
||||
void func_800CB2C8(void *arg0) {
|
||||
extern void func_80146CA0(s32 *);
|
||||
extern s32 func_80012ABC(s32, s32, s32);
|
||||
extern void func_8001382C(s32, void *, void *);
|
||||
extern void func_80162FC0(s32 *);
|
||||
|
||||
void *s1;
|
||||
register void *p __asm__("$4");
|
||||
register s32 raw __asm__("$3");
|
||||
register s32 t __asm__("$2");
|
||||
s32 r;
|
||||
s32 buf[3];
|
||||
|
||||
s1 = *(void **)((u8 *)arg0 + 0x20);
|
||||
p = *(void **)((u8 *)arg0 + 0x4C);
|
||||
raw = *(u8 *)((u8 *)s1 + 0x24);
|
||||
t = raw - 0x10;
|
||||
if (t < 0) {
|
||||
func_80146CA0((s32 *)arg0);
|
||||
return;
|
||||
}
|
||||
raw = t;
|
||||
__asm__("" : "=r"(raw) : "0"(raw));
|
||||
t = raw;
|
||||
*(u8 *)((u8 *)s1 + 0x24) = *(u8 *)((u8 *)s1 + 0x25) = *(u8 *)((u8 *)s1 + 0x26) = t;
|
||||
r = func_80012ABC(*(s16 *)((u8 *)s1 + 0x12),
|
||||
*(s16 *)(*(void **)((u8 *)p + 0x20) + 0x12), 0x10);
|
||||
*(s16 *)((u8 *)s1 + 0x12) = r;
|
||||
func_8001382C((s16)r, (u8 *)arg0 + 0x24, buf);
|
||||
*(s32 *)((u8 *)arg0 + 0x10) = buf[0];
|
||||
*(s32 *)((u8 *)arg0 + 0x14) = buf[1];
|
||||
*(s32 *)((u8 *)arg0 + 0x18) = buf[2];
|
||||
func_80162FC0((s32 *)arg0);
|
||||
}
|
||||
|
||||
|
||||
extern void func_80162CCC(void);
|
||||
void func_800CB384(void) {
|
||||
|
||||
@@ -581,7 +581,21 @@ void func_801E3424(s32 param_1) {
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E3448);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC03_134/nonmatchings/md_SC03_134", func_801E346C);
|
||||
void func_801E346C(s32 a0_) {
|
||||
|
||||
extern s32 D_801E9E38;
|
||||
extern s32 D_801E9E3C;
|
||||
|
||||
register s32 c __asm__("$3") = 2;
|
||||
register s32 a0 __asm__("$4") = a0_;
|
||||
s32 p1 = D_801E9E38;
|
||||
|
||||
*(s16 *)((s32)a0 + 0xFC) = 0;
|
||||
a0 = D_801E9E3C;
|
||||
*(s16 *)(p1 + 0xFC) = c;
|
||||
*(s16 *)((s32)a0 + 0xFC) = 0;
|
||||
}
|
||||
|
||||
|
||||
void func_801E3490(s32 arg0) {
|
||||
extern s32 D_801E9E38;
|
||||
|
||||
@@ -5287,7 +5287,32 @@ void func_8017FC04(s32 arg0) {
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017FCC0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017FCFC);
|
||||
extern u16 D_801C7600[];
|
||||
|
||||
void func_8017FCFC(u16 *a0) {
|
||||
register u16 *p __asm__("$5");
|
||||
register s32 i __asm__("$6");
|
||||
register s32 c __asm__("$7");
|
||||
register u16 *q __asm__("$3");
|
||||
|
||||
p = D_801C7600;
|
||||
i = 0;
|
||||
c = 0x20;
|
||||
q = p + 2;
|
||||
do {
|
||||
if (*(s16 *)(q + 1) == 0) {
|
||||
*(s16 *)(q + 1) = c;
|
||||
p[0] = a0[0];
|
||||
q[-1] = a0[1];
|
||||
q[0] = a0[2];
|
||||
return;
|
||||
}
|
||||
i++;
|
||||
q += 4;
|
||||
p += 4;
|
||||
} while (i < 0x100);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017FD64);
|
||||
|
||||
|
||||
@@ -8153,7 +8153,14 @@ void func_80184590(s32 param_1) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_801845C0);
|
||||
void func_801845C0(s32 param_1) {
|
||||
extern u8 D_80126B5C;
|
||||
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
|
||||
|
||||
*(s32 *)&D_80126B5C = *(s32 *)(param_1 + 4);
|
||||
func_8012C658(0xBA, 1, param_1);
|
||||
}
|
||||
|
||||
|
||||
s32 func_801845F4(s32 param_1) {
|
||||
extern s32 func_80172670(s32 *a0);
|
||||
|
||||
@@ -7705,7 +7705,43 @@ void func_80188950(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80188A0C);
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001CA1C(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8012B23C(s32 a0);
|
||||
extern s32 rand(void);
|
||||
|
||||
extern u8 D_801904A8;
|
||||
extern u8 D_801904B4;
|
||||
|
||||
void func_80188A0C(s32 param_1)
|
||||
{
|
||||
s32 v0;
|
||||
s32 s0;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
s0 = param_1;
|
||||
*(s32 *)(s0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4((void *)s0);
|
||||
} else {
|
||||
func_8001CA1C(v0, (s32)&D_801904A8);
|
||||
func_8012A828((s32)s0, &D_801904B4);
|
||||
*(s16 *)(s0 + 2) = 1;
|
||||
func_8012B23C((s32)s0);
|
||||
|
||||
*(s32 *)(s0 + 0x10) = ((rand() & 0xFF) - 0x80) << 12;
|
||||
*(s32 *)(s0 + 0x18) = ((rand() & 0xFF) - 0x80) << 12;
|
||||
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x18) = 0x2000;
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x1A) = 0x2000;
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x1C) = 0x2000;
|
||||
|
||||
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x2C) |= 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -3403,7 +3403,28 @@ int func_8017D584(int param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017D5B4);
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C2C4(s32 a0);
|
||||
extern u8 D_801836F8;
|
||||
|
||||
void func_8017D5B4(void *param_1) {
|
||||
s32 ret;
|
||||
if (*(u16 *)((s32)param_1 + 2) == 0) {
|
||||
ret = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)param_1 + 0x20) = ret;
|
||||
if (ret == 0) {
|
||||
func_8012CAE4(param_1);
|
||||
} else {
|
||||
func_8001C2C4(ret);
|
||||
*(u16 *)((s32)param_1 + 0x5C) = 0x40;
|
||||
*(s32 *)((s32)param_1 + 0x58) = (u32)&D_801836F8;
|
||||
*(u8 *)((s32)param_1 + 0x75) = 2;
|
||||
(*(u16 *)((s32)param_1 + 2))++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_8017D638(void);
|
||||
|
||||
@@ -4403,7 +4424,30 @@ void func_8017E948(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017E9EC);
|
||||
extern u16 D_8019572A;
|
||||
|
||||
void func_8017E9EC(s32 s0) {
|
||||
s32 v0;
|
||||
s32 v1;
|
||||
|
||||
if (func_8012BEE8(s0) != 0) {
|
||||
v1 = *(s32 *)(s0 + 0x20);
|
||||
v0 = *(u16 *)(v1 + 0x2C);
|
||||
v0 &= 0xFFEF;
|
||||
*(s16 *)(v1 + 0x2C) = v0;
|
||||
*(s16 *)(s0 + 0x2) = 3;
|
||||
*(u16 *)(s0 + 0x5C) = D_8019572A;
|
||||
} else {
|
||||
s32 a0 = *(s32 *)(s0 + 0x1C);
|
||||
a0 = (a0 << 10) >> 4;
|
||||
v0 = func_80047948(a0);
|
||||
v1 = *(s32 *)(s0 + 0x20);
|
||||
*(s16 *)(v1 + 0x1C) = v0;
|
||||
*(s16 *)(v1 + 0x1A) = v0;
|
||||
*(s16 *)(v1 + 0x18) = v0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void func_8012A828(s32 a0, s32 a1);
|
||||
|
||||
@@ -3937,7 +3937,42 @@ void func_8017D248(s32 param_1, s16 *param_2) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8017AE2C", func_8017D3E0);
|
||||
extern u16 D_80126B66;
|
||||
extern int func_80178970(void);
|
||||
extern void func_80178D18(void);
|
||||
extern s32 func_80178B18(s32 param_1, s32 param_2);
|
||||
extern void func_8012C218(void *a0);
|
||||
extern void (*D_80182154[])(s32);
|
||||
extern void (*D_801821A4[])(void);
|
||||
|
||||
void func_8017D3E0(s32 a0) {
|
||||
switch (*(u16 *)(a0 + 2)) {
|
||||
case 0:
|
||||
*(s32 *)(a0 + 0x1C) = 0x14;
|
||||
*(u16 *)(a0 + 2) = *(u16 *)(a0 + 2) + 1;
|
||||
break;
|
||||
case 1:
|
||||
if (--*(s32 *)(a0 + 0x1C) == 0) {
|
||||
if ((s16)D_80126B66 < 0x400) {
|
||||
func_80178B18(a0, (s32)&D_80182154);
|
||||
} else {
|
||||
func_80178B18(a0, (s32)&D_801821A4);
|
||||
}
|
||||
*(u16 *)(a0 + 2) = *(u16 *)(a0 + 2) + 1;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (((s32 (*)(s32))func_80178970)(a0) == 0) {
|
||||
return;
|
||||
}
|
||||
((void (*)(s32))func_80178D18)(a0);
|
||||
func_8012C218((void *)a0);
|
||||
return;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8017AE2C", func_8017D4CC);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user