mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
feat(decomp): ox wave du overlays — 3 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
@@ -124,7 +124,71 @@ void func_800CB09C(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_037/nonmatchings/md_MAIN_037", func_800CB150);
|
||||
extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80162FC0(void *a0);
|
||||
extern s32 func_80146E98(s32 a0);
|
||||
extern s32 func_80163950(s32 a0);
|
||||
extern s32 func_8016380C(void *a0, s32 a1);
|
||||
extern void func_80016714(s8 *a0, s32 a1);
|
||||
extern void func_80146578(void);
|
||||
extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80146E90(s32 *a0, s32 a1);
|
||||
extern void func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern void func_80147324(s32 a0);
|
||||
extern void func_80146CA0(void *a0);
|
||||
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80163328(void *a0);
|
||||
extern void func_800CB358(void);
|
||||
extern u8 D_800CB628[];
|
||||
|
||||
void func_800CB150(void *a0) {
|
||||
s32 sp20;
|
||||
s32 flags;
|
||||
s32 sh;
|
||||
s32 t;
|
||||
|
||||
func_80162FF4((s32)a0, 0, 0x40000, 0);
|
||||
func_80162FC0(a0);
|
||||
if (func_80146E98((s32)a0) != 0) {
|
||||
func_80146CA0(a0);
|
||||
return;
|
||||
}
|
||||
flags = func_80163950((s32)a0) != 0;
|
||||
sh = flags << 13;
|
||||
t = sh | func_8016380C(a0, (s32)&sp20);
|
||||
if (t == 0) {
|
||||
goto tail;
|
||||
}
|
||||
if (t != 0x8000) {
|
||||
goto alloc;
|
||||
}
|
||||
*(s32 *)((s32)a0 + 0x2C) = 0;
|
||||
*(s32 *)((s32)a0 + 0x24) = 0;
|
||||
goto tail;
|
||||
alloc:
|
||||
func_80016714(*(s8 **)((s32)a0 + 0x20), 0x84);
|
||||
*(s32 *)((s32)a0 + 0x20) = 0;
|
||||
t = ((s32 (*)(void))func_80146578)();
|
||||
*(s32 *)((s32)a0 + 0x20) = t;
|
||||
if (t != 0) {
|
||||
func_8001CB6C((u8 *)t, (s32)D_800CB628, 0x1A0, 0x100);
|
||||
*(u8 *)((s32)t + 0x27) = 0x1B;
|
||||
*(u16 *)((s32)t + 0x10) = 0x400;
|
||||
func_80146E90((s32 *)a0, 0x20);
|
||||
for (t = 0; t < 4; t++) {
|
||||
func_80146A6C(0x45, a0, *(s16 *)((s32)a0 + 6), *(s16 *)((s32)a0 + 0xA),
|
||||
*(s16 *)((s32)a0 + 0xE), t, 0);
|
||||
}
|
||||
func_80147324(0x913);
|
||||
func_80146CA0(a0);
|
||||
return;
|
||||
}
|
||||
((void (*)(s32))func_800CB358)(a0);
|
||||
tail:
|
||||
func_80163408((s32)a0, 0x27, 0, 0x80);
|
||||
((void (*)(s32))func_80163328)(a0);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_037/nonmatchings/md_MAIN_037", func_800CB2A8);
|
||||
|
||||
|
||||
@@ -3444,7 +3444,64 @@ INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E21
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E3A0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E4A0);
|
||||
void func_8017E4A0(void)
|
||||
{
|
||||
register u8 *p __asm__("$3");
|
||||
register u32 u __asm__("$2");
|
||||
register u32 w __asm__("$4");
|
||||
register u32 mlo __asm__("$5");
|
||||
register u32 mhi __asm__("$6");
|
||||
register u32 ent __asm__("$4");
|
||||
register u32 c64 __asm__("$2");
|
||||
s32 frame_pad[2];
|
||||
extern u8 *D_800A5E60;
|
||||
extern s16 D_800B9A02;
|
||||
extern u8 D_800A6614[];
|
||||
|
||||
(void)&frame_pad;
|
||||
w = 0xE100001E;
|
||||
mlo = 0xFFFFFF;
|
||||
__asm__ __volatile__("":::"memory");
|
||||
|
||||
p = D_800A5E60;
|
||||
mhi = 0xFF000000;
|
||||
*(s8 *)(p + 3) = 5;
|
||||
__asm__ __volatile__("");
|
||||
__asm__ __volatile__("li\t%0,0x64\n\tsw\t%1,4(%2)"
|
||||
: "=&r"(c64)
|
||||
: "r"(w), "r"(p)
|
||||
: "memory");
|
||||
*(s8 *)(p + 0xB) = c64;
|
||||
w = 0x80;
|
||||
*(s16 *)(p + 0xC) = -0x40;
|
||||
*(s16 *)(p + 0xE) = 0x50;
|
||||
*(s16 *)(p + 0x12) = 0x40D7;
|
||||
*(s16 *)(p + 0x14) = 0xA0;
|
||||
*(s16 *)(p + 0x16) = 0x20;
|
||||
*(s16 *)(p + 0x14) = 0x80;
|
||||
*(s8 *)(p + 0xA) = w;
|
||||
*(s8 *)(p + 0x9) = w;
|
||||
*(s8 *)(p + 0x8) = w;
|
||||
*(s8 *)(p + 0x10) = 0;
|
||||
*(s8 *)(p + 0x11) = w;
|
||||
*(s16 *)(p + 0x16) = 0x10;
|
||||
|
||||
u = D_800B9A02 & 0xFFFF;
|
||||
w = *(u32 *)p;
|
||||
u = *(u32 *)(D_800A6614 + (u << 14));
|
||||
w = (w & mhi) | (u & mlo);
|
||||
*(u32 *)p = w;
|
||||
|
||||
u = (u32)D_800A6614;
|
||||
ent = (u32 *)(u + ((D_800B9A02 & 0xFFFF) << 14));
|
||||
mlo = (u32)p & mlo;
|
||||
u = *(u32 *)ent;
|
||||
p += 0x18;
|
||||
D_800A5E60 = p;
|
||||
u = (u & mhi) | mlo;
|
||||
*(u32 *)ent = u;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E594);
|
||||
|
||||
|
||||
@@ -3499,7 +3499,92 @@ void func_80184B80(s32 param_1, s32 param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_80184CB0);
|
||||
typedef struct { u8 b[0x6C]; } Blk6C_80184CB0;
|
||||
|
||||
extern s32 func_8012C354(s32 a0, s32 a1);
|
||||
extern void func_8001C810(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern void func_8001D074(s32 a0, s32 a1);
|
||||
extern void func_8001CD50(s32 a0, s32 a1);
|
||||
extern void func_800233CC(void *a0, unsigned short a1);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
|
||||
extern u8 D_8018B7A4[];
|
||||
extern u8 D_801BBF94[];
|
||||
extern u8 D_8018B7D8[];
|
||||
extern u8 D_801C13A8[];
|
||||
extern u8 D_80126B5C;
|
||||
extern s32 D_80126B60;
|
||||
extern s32 D_80126B64;
|
||||
extern u8 D_801C1458[];
|
||||
extern u8 D_801C1418;
|
||||
extern u8 D_801C1419;
|
||||
extern u8 D_801C141A;
|
||||
extern u8 D_801C141C;
|
||||
extern u8 D_801C141D;
|
||||
extern u8 D_801C141E;
|
||||
extern s32 D_801C14D8[];
|
||||
|
||||
void func_80184CB0(s32 a0) {
|
||||
extern u8 D_801BBFBC[];
|
||||
u8 *p;
|
||||
s16 sp[8];
|
||||
s32 s3;
|
||||
|
||||
if (*(s32 *)(a0 + 0x20) == 0) {
|
||||
if (func_8012C354(a0, (s32)&D_8018B7A4) == 0) {
|
||||
return;
|
||||
}
|
||||
func_8001C810(*(s32 *)(a0 + 0x20), (s32)&D_801BBF94);
|
||||
func_8012A828(a0, (void *)&D_8018B7D8);
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x20;
|
||||
*(s32 *)(*(s32 *)(a0 + 0x20) + 0x80) = (s32)&D_801C13A8;
|
||||
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x40000000;
|
||||
*(s16 *)(a0 + 0xAE) = -3;
|
||||
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x80000000;
|
||||
}
|
||||
*(s32 *)(a0 + 4) = *(s32 *)&D_80126B5C;
|
||||
*(s32 *)(a0 + 8) = D_80126B60;
|
||||
*(s32 *)(a0 + 0xC) = D_80126B64;
|
||||
func_8012B2CC(a0);
|
||||
*(Blk6C_80184CB0 *)D_801C1458 = *(Blk6C_80184CB0 *)D_801BBFBC;
|
||||
*(s32 *)(a0 + 0xD8) = (s32)&D_801C1458;
|
||||
|
||||
s3 = ((s32 (*)(s32, s32))func_8001D074)(0x7E, 0x100);
|
||||
if (s3 == 0) {
|
||||
return;
|
||||
}
|
||||
p = &D_801C1418;
|
||||
*(s32 *)(a0 + 0xD0) = s3;
|
||||
func_8001CD50(s3, (s32)p);
|
||||
D_801C1419 = 0xFF;
|
||||
D_801C141A = 0xFF;
|
||||
*p = 0xFF;
|
||||
D_801C141E = 0;
|
||||
D_801C141D = 0;
|
||||
D_801C141C = 0;
|
||||
func_800233CC(p, 0x100);
|
||||
|
||||
sp[0] = *(u16 *)(a0 + 6);
|
||||
sp[1] = (u16)(*(u16 *)(a0 + 0xA) - 0x38);
|
||||
sp[2] = *(u16 *)(a0 + 0xE);
|
||||
func_800D20C0(&sp[0], &sp[4], 5);
|
||||
|
||||
D_801C14D8[0] = sp[0];
|
||||
D_801C14D8[1] = sp[1];
|
||||
D_801C14D8[2] = sp[2];
|
||||
func_800D23D0(&sp[4]);
|
||||
RotMatrixYXZ(&sp[4], &D_801C14D8[-5]);
|
||||
*(s32 *)(s3 + 0x34) = (s32)&D_801C14D8[-5];
|
||||
*(s16 *)(s3 + 0x1A) = 0;
|
||||
*(s16 *)(s3 + 0x18) = 0;
|
||||
*(s32 *)(s3 + 4) |= 0x50000000;
|
||||
*(u16 *)(a0 + 2) = 0xB;
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user