mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-04 00:20:10 -04:00
feat(decomp): ox wave bd overlays — 3 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
@@ -3014,7 +3014,79 @@ s32 func_8017F730(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F790);
|
||||
typedef struct { u32 a, b, c, d; } B16;
|
||||
extern B16 D_800A5E88, D_800A5E98, D_800A5EA8;
|
||||
extern B16 D_801CE030, D_801CE040, D_801CE050;
|
||||
extern u8 D_801BBA7F[];
|
||||
extern s32 func_8017D9F4(s32);
|
||||
extern s32 func_800291B4(s32);
|
||||
extern void func_800D0C48(s32);
|
||||
extern void func_8013C938(void);
|
||||
extern s32 func_8012C51C(void *, s32);
|
||||
extern void func_80028394(s32, s32, s32, s32);
|
||||
extern void func_80028428(s32, s32, s32, s32);
|
||||
|
||||
typedef struct { s16 f10, f12, f14, f16, f18, f1A, f1C, f1E; s32 f20; } PrimF790;
|
||||
|
||||
s32 func_8017F790(s32 a0) {
|
||||
u8 c;
|
||||
|
||||
if (*(s16 *)(a0 + 0xFE) != 0) goto L818;
|
||||
c = D_801BBA7F[*(s16 *)(a0 + 0x100)];
|
||||
if (c >= 0x2C) {
|
||||
*(s16 *)(a0 + 0xFE) = 1;
|
||||
goto L818;
|
||||
}
|
||||
if (func_8017D9F4(c) != 0) {
|
||||
*(s16 *)(a0 + 0xFE) = 1;
|
||||
if (*(s16 *)(a0 + 0x100) == 0x1C && (func_800291B4(0x7E) & 0x20)) {
|
||||
func_800D0C48(1);
|
||||
}
|
||||
}
|
||||
L818:
|
||||
if (*(s16 *)(a0 + 0x10A) < 0x31) goto L874;
|
||||
{
|
||||
u16 n = *(u16 *)(a0 + 0x106) + 0x10;
|
||||
*(s16 *)(a0 + 0x106) = n;
|
||||
*(s16 *)(a0 + 0x108) = n;
|
||||
if ((s16)n >= 0x100) {
|
||||
*(s16 *)(a0 + 0x106) = 0xFF;
|
||||
*(s16 *)(a0 + 0x108) = 0xFF;
|
||||
}
|
||||
*(s16 *)(a0 + 0x10A) = *(u16 *)(a0 + 0x10A) - 3;
|
||||
return 0;
|
||||
}
|
||||
L874:
|
||||
if (*(s16 *)(a0 + 0xFE) == 0) return 0;
|
||||
func_8013C938();
|
||||
{
|
||||
PrimF790 sp;
|
||||
s32 f18v;
|
||||
sp.f16 = 0x1ED;
|
||||
f18v = *(u16 *)(a0 + 0x100);
|
||||
sp.f1A = 0;
|
||||
sp.f1C = 0;
|
||||
sp.f1E = 0;
|
||||
sp.f20 = 0;
|
||||
sp.f10 = 0;
|
||||
sp.f12 = -0x400;
|
||||
sp.f14 = 0;
|
||||
sp.f18 = f18v;
|
||||
*(s32 *)(a0 + 0xD4) = func_8012C51C(&sp, a0);
|
||||
}
|
||||
*(s16 *)(a0 + 0x104) = 0;
|
||||
D_801CE030 = D_800A5E88;
|
||||
D_801CE040 = D_800A5E98;
|
||||
D_801CE050 = D_800A5EA8;
|
||||
func_80028394(0, 0, 0x14, 0x13);
|
||||
func_80028428(0, 0x96, 0x96, 0xAA);
|
||||
func_80028394(1, 0, 0xA, 0x14);
|
||||
func_80028428(1, 0x66, 0x66, 0x66);
|
||||
func_80028394(2, 0, -0xA, 0);
|
||||
func_80028428(2, 0x4D, 0x33, 0x80);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F9F8);
|
||||
|
||||
|
||||
@@ -3856,7 +3856,72 @@ void func_8017E3A0(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017E3AC);
|
||||
extern s32 rand(void);
|
||||
extern void func_8012A828(s32 a0, s32 a1);
|
||||
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 func_8012E778(s32 param_1, s32 param_2);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8012F214(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 func_8017F76C(s16 *a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
extern u8 D_801A9C08[];
|
||||
extern u8 D_801A50F4[];
|
||||
extern u8 D_801A5104[];
|
||||
|
||||
typedef struct { u8 b[8]; } Blk8_func_8017E3AC;
|
||||
|
||||
void func_8017E3AC(s32 a0) {
|
||||
Blk8_func_8017E3AC sp10;
|
||||
Blk8_func_8017E3AC sp18;
|
||||
register s32 act __asm__("$18");
|
||||
register s32 i __asm__("$16");
|
||||
register s32 angm __asm__("$19");
|
||||
register s32 angp __asm__("$20");
|
||||
s32 k;
|
||||
s32 j;
|
||||
s32 pos;
|
||||
|
||||
act = a0;
|
||||
if ((*(u32 *)(act + 0xE0) & 1) == 0) {
|
||||
if (func_8012BD3C(act, 0x400, *(s32 *)(act + 0xDC)) == 0) {
|
||||
*(u16 *)(act + 2) = 1;
|
||||
} else {
|
||||
func_8012A828(act, (s32)D_801A9C08);
|
||||
if (func_8012E778(act, 0x8C00B4) == 1) {
|
||||
func_8002D4C8(0x64A, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (*(s32 *)(act + 0x94) == 0x19) {
|
||||
func_8012F214(act, (s32)D_801A50F4, (s32)&sp10);
|
||||
func_8012F214(act, (s32)&D_801A50F4[8], (s32)&sp18);
|
||||
i = 0;
|
||||
{
|
||||
register s32 fv __asm__("$2") = *(u16 *)(*(s32 *)(act + 0x20) + 0x12);
|
||||
angp = fv + 0x400;
|
||||
angm = fv - 0x400;
|
||||
}
|
||||
k = -0x80000;
|
||||
while (i < 6) {
|
||||
func_8017F76C((s16 *)&sp10, angp * 0x10000 >> 0x10,
|
||||
rand() % 4 * -0x10000 + k, 0);
|
||||
func_8017F76C((s16 *)&sp18, angm * 0x10000 >> 0x10,
|
||||
rand() % 4 * -0x10000 + k, 0);
|
||||
i++;
|
||||
}
|
||||
j = 0;
|
||||
pos = 0x80000;
|
||||
k = (s32)D_801A5104;
|
||||
while (j < 4) {
|
||||
func_8012F214(act, k, (s32)&sp10);
|
||||
func_8017F76C((s16 *)&sp10, 0, rand() % 4 * 0x10000 + pos, 1);
|
||||
j++;
|
||||
k += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_8012BD14(s32 a0);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
|
||||
@@ -4619,7 +4619,105 @@ void func_80180E80(u8 *self) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180F30);
|
||||
extern void func_801833D4(int a0, int a1);
|
||||
extern s32 func_80183A28(u8 *a0);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_80183564(s32 a0, s16 *a1);
|
||||
extern s32 func_8012C588(s32 a0, s32 a1);
|
||||
extern void func_801837C4(s32, s32);
|
||||
extern void func_80183BAC(u8*);
|
||||
extern void func_801861D4(s32 a0);
|
||||
extern void func_8018A018(s32 a0);
|
||||
extern void func_80183880(s32 a0);
|
||||
extern void func_80185960(s32 target, u16 *cur, s32 step);
|
||||
extern void func_8012BEE8(u8*);
|
||||
extern void func_80189D38(void*);
|
||||
extern void func_801811D0(s32 *a0);
|
||||
extern void func_8013C9C4(void *a0);
|
||||
extern u16 D_801EFD20;
|
||||
extern s32 D_801EFCA4;
|
||||
extern s32 aFC4C[] __asm__("D_801EFC4C");
|
||||
extern s32 D_801EFCE8[];
|
||||
extern u8 D_80194490[];
|
||||
extern u8 D_80194470[];
|
||||
extern u8 D_80190B88[];
|
||||
|
||||
void func_80180F30(s32 s2)
|
||||
{
|
||||
s32 v0;
|
||||
s32 v1;
|
||||
s32 s1;
|
||||
s32 *s0;
|
||||
|
||||
if ((*(u16 *)(s2 + 0x34) < 4)) {
|
||||
if (((s32 (*)(int, int))func_801833D4)(s2, 0x30) != 0) {
|
||||
switch (*(u16 *)(s2 + 0x34)) {
|
||||
case 0:
|
||||
*(s16 *)(s2 + 0x84) = 0;
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
v1 = *(u16 *)(s2 + 0xF4) + 1;
|
||||
*(u16 *)(s2 + 0xF4) = v1;
|
||||
func_80183564(s2, (s16 *)(D_80194490 + (((v1 << 16) >> 13))));
|
||||
*(u16 *)(s2 + 0x34) = *(u16 *)(s2 + 0x34) + 1;
|
||||
break;
|
||||
case 2:
|
||||
func_8018A018(D_801EFCA4);
|
||||
*(s16 *)(s2 + 0xF2) = 0x20;
|
||||
func_80183564(s2, (s16 *)D_80194470);
|
||||
*(u16 *)(s2 + 0x34) = *(u16 *)(s2 + 0x34) + 1;
|
||||
func_8012C588(0x3D8, s2);
|
||||
break;
|
||||
case 3:
|
||||
((void (*)(s32))func_801837C4)(s2);
|
||||
((void (*)(s32))func_80183BAC)(s2);
|
||||
*(u16 *)(s2 + 0x100) = 0;
|
||||
*(s32 *)(s2 + 0x1C) = 8;
|
||||
*(u16 *)(s2 + 0x34) = *(u16 *)(s2 + 0x34) + 1;
|
||||
func_801861D4(s2);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
func_80183A28((u8 *)s2);
|
||||
if (*(u16 *)(s2 + 0x34) == 1) {
|
||||
v0 = *(u16 *)(s2 + 0x84) + 1;
|
||||
*(s16 *)(s2 + 0x84) = v0;
|
||||
if (((v0 << 16) >> 16) == 0x50) {
|
||||
func_8002D4C8(0x992, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
func_80183880(s2);
|
||||
func_80185960(0, (u16 *)(*(s32 *)(aFC4C[D_801EFD20] + 0x20) + 0x14), 0x40);
|
||||
switch (*(u16 *)(s2 + 0x34)) {
|
||||
case 4:
|
||||
if (((s32 (*)(u8 *))func_8012BEE8)((u8 *)s2) != 0) {
|
||||
*(s16 *)(s2 + 0xF2) = 0xC0;
|
||||
s1 = 0x10;
|
||||
s0 = D_801EFCE8;
|
||||
do {
|
||||
((void (*)(s32))func_80189D38)(*s0++);
|
||||
s1++;
|
||||
} while (s1 < 0x14);
|
||||
*(u16 *)(s2 + 0x34) = 5;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (*(s16 *)(s2 + 0xF2) == 0) {
|
||||
func_801811D0((s32 *)s2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (*(s16 *)(s2 + 0xF2) != 0) {
|
||||
if ((*(u16 *)(s2 + 0xF2) & 0xF) == 0) {
|
||||
func_8013C9C4(D_80190B88);
|
||||
}
|
||||
*(u16 *)(s2 + 0xF2) = *(u16 *)(s2 + 0xF2) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_801811D0(s32 *arg0) {
|
||||
extern s16 D_801944A8[];
|
||||
|
||||
Reference in New Issue
Block a user