mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 15:43:06 -04:00
feat(decomp): ox wave db overlays — 8 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
@@ -92,7 +92,67 @@ void func_800CB1C0(void *arg0) {
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_015/nonmatchings/md_MAIN_015", func_800CB21C);
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_015/nonmatchings/md_MAIN_015", func_800CB2E0);
|
||||
void func_800CB2E0(void *arg0) {
|
||||
extern s32 func_80146E98(s32 a0);
|
||||
extern void func_80013F3C(void *a0);
|
||||
extern void func_800126C4(s32 a0, s32 a1);
|
||||
extern void func_800123F0(s32 a0, s32 a1);
|
||||
extern void func_80012558(s32 a0, s32 a1);
|
||||
extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
|
||||
extern void func_80162FC0(s32 *a0);
|
||||
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80163328();
|
||||
extern s32 func_801632F0();
|
||||
extern void func_80013E94(void *a0, void *a1);
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern void func_80146CA0(void *a0);
|
||||
extern s16 D_80126B18[];
|
||||
extern s16 D_80126B1A[];
|
||||
extern s16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
|
||||
register void *a0v __asm__("$17");
|
||||
register void *fp __asm__("$18");
|
||||
u8 buf[0x40];
|
||||
s32 sp60;
|
||||
s32 cmd;
|
||||
|
||||
a0v = arg0;
|
||||
fp = *(void **)((u8 *)a0v + 0x20);
|
||||
|
||||
if (func_80146E98((s32)a0v)) {
|
||||
func_80146A6C(3, a0v, *(s16 *)((u8 *)a0v + 6), *(s16 *)((u8 *)a0v + 0xA), *(s16 *)((u8 *)a0v + 0xE), 0, 0x80001C00);
|
||||
} else {
|
||||
register u8 *bp __asm__("$16");
|
||||
bp = buf + 0x20;
|
||||
func_80013F3C(bp);
|
||||
func_800126C4((s32)bp, *(s16 *)((u8 *)fp + 0x10));
|
||||
func_800123F0((s32)bp, *(s16 *)((u8 *)fp + 0x14));
|
||||
func_80012558((s32)bp, *(s16 *)((u8 *)fp + 0x12));
|
||||
func_80163194((s32)a0v, 0, 0, 0, (s32)bp);
|
||||
func_80162FC0((s32 *)a0v);
|
||||
func_80163408((s32)a0v, 0x10, 0x80, 0x200);
|
||||
func_80163328(a0v);
|
||||
switch ((u32)func_801632F0(a0v)) {
|
||||
case 1:
|
||||
func_80013E94(&D_80114EB0, &sp60);
|
||||
cmd = 0x1F;
|
||||
break;
|
||||
case 2:
|
||||
case 4:
|
||||
func_80013E94(&D_80114EC8, &sp60);
|
||||
cmd = 7;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
sp60 |= 0x80000000;
|
||||
func_80146A6C(cmd, a0v, D_80126B18[0], D_80126B1A[0], D_80126B1C, sp60, 0);
|
||||
}
|
||||
func_80146CA0(a0v);
|
||||
}
|
||||
|
||||
|
||||
extern void func_80162CCC(void);
|
||||
void func_800CB474(void) {
|
||||
|
||||
@@ -7283,7 +7283,21 @@ void func_801859C4(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80185AF0);
|
||||
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern char D_801D0DA8;
|
||||
|
||||
s32 aF80185AF0(s32 arg0) __asm__("func_80185AF0");
|
||||
s32 aF80185AF0(s32 arg0) {
|
||||
if (*(s32 *)(arg0 + 0xDC) & 1) {
|
||||
return 0;
|
||||
}
|
||||
if (func_8012D5E4(arg0, (s32)&D_801D0DA8, (s32)&D_801D0DA8 + 8, 0xB) != 1) {
|
||||
return 0;
|
||||
}
|
||||
*(s32 *)(arg0 + 0xDC) |= 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
@@ -7599,7 +7613,145 @@ void func_801866C8(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80186770);
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_8012B8E4(s32 a0, s32 a1);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_80142414(s32 a0, s16 a1);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8012B178(s32 a0, s32 a1);
|
||||
extern void func_8012CBA4(s32);
|
||||
extern void func_80131E00(s32 a0, s32 a1);
|
||||
extern void func_80185F88(s32 a0);
|
||||
extern s32 func_80143B6C(s32 a0, s32 a1);
|
||||
extern void func_80186C38(s32 a0, s32 a1);
|
||||
extern void Square0(s32 *a0, s32 *a1);
|
||||
extern s32 func_8012BCCC(s32 a0);
|
||||
extern s32 rand(void);
|
||||
extern s32 func_8012B744(void *a0, void *a1);
|
||||
extern void func_8012ADE4(u8 *a0);
|
||||
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_80186B08(void);
|
||||
extern void func_80186B34(s32 a0);
|
||||
extern void func_80186B7C(s32 a0);
|
||||
|
||||
extern s32 D_801D619C;
|
||||
extern s16 D_801E1264;
|
||||
extern s16 D_801E11DC;
|
||||
extern s16 D_801E1AFC;
|
||||
extern short D_801E1134;
|
||||
|
||||
void func_80186770(s32 param_1)
|
||||
{
|
||||
struct { s32 vx, vy, vz, pad; } vec;
|
||||
s32 v;
|
||||
s32 d;
|
||||
s32 b178arg;
|
||||
void *target;
|
||||
|
||||
switch (*(u16 *)(param_1 + 0x34)) {
|
||||
case 0:
|
||||
v = func_8012B8E4(param_1, 4);
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += v;
|
||||
if (*(s32 *)(param_1 + 0x1C) == 0xF) {
|
||||
func_80142414(param_1, -0x78);
|
||||
func_8002D4C8(0x6A9, 0);
|
||||
}
|
||||
if (func_8012BEE8(param_1) != 0) {
|
||||
*(s16 *)(param_1 + 0x2) = 3;
|
||||
if ((*(u16 *)(param_1 + 0x86) & 2) != 0) {
|
||||
*(s16 *)(param_1 + 0x34) = 1;
|
||||
*(s32 *)(param_1 + 0x1C) = 0x28;
|
||||
if ((*(u16 *)(param_1 + 0x70) & 0x200) != 0) {
|
||||
func_8012A828(param_1, &D_801E1AFC);
|
||||
} else {
|
||||
func_8012A828(param_1, &D_801E11DC);
|
||||
}
|
||||
*(u16 *)(param_1 + 0xFE) = 0;
|
||||
} else {
|
||||
*(s16 *)(param_1 + 0x34) = 0;
|
||||
func_8012A828(param_1, &D_801E1264);
|
||||
*(s32 *)(param_1 + 0x1C) = 0x19;
|
||||
*(u16 *)(param_1 + 0x86) |= 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
v = func_8012B8E4(param_1, 6);
|
||||
b178arg = D_801D619C;
|
||||
{
|
||||
register u16 *pp __asm__("$3");
|
||||
register s32 nv __asm__("$6");
|
||||
|
||||
pp = (u16 *)(*(s32 *)(param_1 + 0x20) + 0x12);
|
||||
nv = *pp + v;
|
||||
*pp = nv;
|
||||
}
|
||||
func_8012B178(param_1, b178arg);
|
||||
d = ((s32 (*)(s32))func_8012CBA4)(param_1);
|
||||
if ((d & 0x1000) != 0) {
|
||||
func_80131E00(param_1, 0x12);
|
||||
} else if (d != 0x2000) {
|
||||
func_8012ADE4((u8 *)param_1);
|
||||
}
|
||||
func_80185F88(param_1);
|
||||
v = *(u16 *)(param_1 + 0xFE) - 1;
|
||||
*(u16 *)(param_1 + 0xFE) = v;
|
||||
if ((v << 16) <= 0) {
|
||||
func_80143B6C(param_1, 0);
|
||||
*(u16 *)(param_1 + 0xFE) = 8;
|
||||
}
|
||||
if ((*(u16 *)(param_1 + 0x70) & 0x200) != 0) {
|
||||
func_80186C38(param_1, 0x11);
|
||||
}
|
||||
target = (void *)(param_1 + 0x88);
|
||||
vec.vx = *(s16 *)(param_1 + 6) - *(s16 *)(param_1 + 0x88);
|
||||
vec.vy = 0;
|
||||
vec.vz = *(s16 *)(param_1 + 0xE) - *(s16 *)(param_1 + 0x8C);
|
||||
Square0(&vec.vx, &vec.vx);
|
||||
if (vec.vx + vec.vz > 0x8FFFF || (d = func_8012BCCC(param_1), d > 0x24000)) {
|
||||
*(s16 *)(param_1 + 0x2) = 1;
|
||||
*(s16 *)(param_1 + 0x34) = 0;
|
||||
*(u16 *)(param_1 + 0x5C) = 0xAA10;
|
||||
*(s32 *)(param_1 + 0x1C) = (rand() & 0x1F) + 0x28;
|
||||
vec.vx = *(s16 *)(param_1 + 6) - *(s16 *)(param_1 + 0x88);
|
||||
vec.vy = 0;
|
||||
vec.vz = *(s16 *)(param_1 + 0xE) - *(s16 *)(param_1 + 0x8C);
|
||||
Square0(&vec.vx, &vec.vx);
|
||||
if (vec.vx + vec.vz > 0x8FFFF) {
|
||||
*(u16 *)(param_1 + 0xFC) = func_8012B744((void *)(param_1 + 4), target);
|
||||
} else {
|
||||
register s32 t __asm__("$2") = rand() & 0x3FF;
|
||||
s32 off = t - 0x200;
|
||||
|
||||
if (off < 0) {
|
||||
off = t - 0x500;
|
||||
} else {
|
||||
off = t + 0x100;
|
||||
}
|
||||
*(u16 *)(param_1 + 0xFC) =
|
||||
(*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + off) & 0xFFF;
|
||||
}
|
||||
func_8012A828(param_1, &D_801E1134);
|
||||
}
|
||||
if ((*(u16 *)(param_1 + 0x70) & 0x100) == 0) {
|
||||
if (func_8012BD3C(param_1, 0x400, 0x1000) != 0) {
|
||||
if ((*(u16 *)(param_1 + 0x70) & 0xF00) == 0) {
|
||||
((void (*)(s32))func_80186B08)(param_1);
|
||||
} else {
|
||||
func_80186B34(param_1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (func_8012BD3C(param_1, 0x400, 0x40000) != 0) {
|
||||
func_80186B7C(param_1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -7928,7 +7928,38 @@ void func_80188EC0(void *arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80188F4C);
|
||||
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);
|
||||
|
||||
void func_80188F4C(void *a0)
|
||||
{
|
||||
register void *s0 __asm__("$16");
|
||||
s32 v0;
|
||||
|
||||
s0 = a0;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)((s32)s0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4(s0);
|
||||
} else {
|
||||
extern u8 D_801905E4[];
|
||||
extern u8 D_801905F0[];
|
||||
|
||||
func_8001CA1C(v0, (s32)&D_801905E4);
|
||||
func_8012A828((s32)s0, &D_801905F0);
|
||||
*(s16 *)((s32)s0 + 0x2) = 1;
|
||||
|
||||
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x18) = 0x2800;
|
||||
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1A) = 0x2800;
|
||||
*(s16 *)(*(s32 *)((s32)s0 + 0x20) + 0x1C) = 0x2800;
|
||||
|
||||
*(u16 *)(*(s32 *)((s32)s0 + 0x20) + 0x2C) |= 0x10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80188FF0);
|
||||
|
||||
|
||||
@@ -4779,7 +4779,37 @@ void func_8018A8DC(void *a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80188274", func_8018A9C8);
|
||||
extern void Square0(s32 *a0, s32 *a1);
|
||||
|
||||
s32 func_8018A9C8(void *a0, s32 a1) {
|
||||
extern u16 D_80126B62;
|
||||
extern u16 D_80126B5E;
|
||||
extern u16 D_80126B66;
|
||||
|
||||
s32 sp10[3];
|
||||
s32 sp20[3];
|
||||
s32 m;
|
||||
s16 e;
|
||||
register s32 ret __asm__("$2");
|
||||
|
||||
sp10[0] = *(s16 *)((s32)a0 + 6) - *(s16 *)&D_80126B5E;
|
||||
sp10[1] = 0;
|
||||
sp10[2] = *(s16 *)((s32)a0 + 0xE) - *(s16 *)&D_80126B66;
|
||||
Square0(sp10, sp20);
|
||||
|
||||
m = D_80126B62 - *(u16 *)((s32)a0 + 0xA);
|
||||
e = m;
|
||||
if ((s16)m < 0) {
|
||||
e = -m;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
if (sp20[0] + sp20[2] < (u16)a1 * (u16)a1) {
|
||||
ret = (s16)e < 4;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80188274", func_8018AA88);
|
||||
|
||||
|
||||
@@ -6343,7 +6343,21 @@ void aF80183E20(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80183EA8);
|
||||
extern s32 rand(void);
|
||||
extern s32 D_801EFC54;
|
||||
extern void func_8018B0B0(void *a0, void *a1, void *a2, u32 a3);
|
||||
|
||||
void func_80183EA8(void) {
|
||||
s16 svec[4];
|
||||
s32 obj;
|
||||
|
||||
obj = D_801EFC54;
|
||||
svec[0] = (rand() & 0x3F) - 0x20;
|
||||
svec[1] = 0x80;
|
||||
svec[2] = (rand() & 0x3F) - 0x20;
|
||||
func_8018B0B0((void *)obj, svec, (void *)0, 8);
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -3581,7 +3581,39 @@ void func_8017DF44(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017DFE8);
|
||||
extern s32 func_8004787C(s32);
|
||||
extern s32 func_80047948(s32);
|
||||
extern void func_8017E0E4();
|
||||
|
||||
void func_8017DFE8(s32 arg0, s32 arg1, s32 arg2)
|
||||
{
|
||||
register s32 s2 __asm__("$18") = arg0;
|
||||
register s32 s3 __asm__("$19") = arg1;
|
||||
register s32 s4 __asm__("$20") = arg2;
|
||||
register s32 r1;
|
||||
register s32 r2;
|
||||
s32 w;
|
||||
|
||||
r1 = func_8004787C(*(s16 *)((u8 *)s2 + 0x100));
|
||||
if (r1 < 0) {
|
||||
r1 += 0x7F;
|
||||
}
|
||||
r1 >>= 7;
|
||||
w = (*(u16 *)((u8 *)s2 + 0x100)) + (*(u16 *)((u8 *)s2 + 0x102));
|
||||
*(u16 *)((u8 *)s2 + 0x100) = w;
|
||||
r2 = func_80047948((s16)w);
|
||||
if (r2 < 0) {
|
||||
r2 += 0x7F;
|
||||
}
|
||||
r2 >>= 7;
|
||||
*(s32 *)((u8 *)s2 + 0xE4) += 4;
|
||||
if (*(s32 *)((u8 *)s2 + 0xE4) >= 0x40) {
|
||||
*(s32 *)((u8 *)s2 + 0xE4) = 0;
|
||||
}
|
||||
func_8017E0E4(s2, 0, (s16)r1, (s16)r2, s3, s4);
|
||||
func_8017E0E4(s2, 1, (s16)r1, (s16)r2, s3, s4);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017E0E4);
|
||||
|
||||
@@ -3653,7 +3685,30 @@ void func_8017E7DC(s32 a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8017C24C", func_8017E82C);
|
||||
extern s16 currentLocationId;
|
||||
extern u8 D_801953A4[];
|
||||
extern void func_80147324(s32 a0);
|
||||
extern int func_801511E0(int arg);
|
||||
extern void func_80154274(s32 *a0, s32 a1);
|
||||
extern void func_80149020(s32 *a0);
|
||||
extern void func_8017EA60(void);
|
||||
extern void func_80146CA0(void *a0);
|
||||
|
||||
void func_8017E82C(s32 p)
|
||||
{
|
||||
if (currentLocationId == 0x3083) {
|
||||
*(u16 *)(p + 0xA) -= 8;
|
||||
}
|
||||
func_80147324(0x451);
|
||||
((void (*)(s32))func_801511E0)(p);
|
||||
((void (*)(s32, s32))func_80154274)(p, (s32)D_801953A4);
|
||||
((void (*)(s32))func_80149020)(p);
|
||||
*(u8 *)(p + 0xDE) = 0xA;
|
||||
*(u8 *)(p + 0xDF) = 0;
|
||||
func_8017EA60();
|
||||
((void (*)(s32))func_80146CA0)((void *)p);
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern s32 func_8017EA84(void);
|
||||
|
||||
Reference in New Issue
Block a user