From fb58ad76c540fff79d0c7b454302c04eb9d3ba4a Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 29 Aug 2026 17:20:11 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20family-remap=20gate=20=E2=80=94?= =?UTF-8?q?=20+23=20fns=20x0=20propagated=20(fleet=2098.8%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c | 568 +++++++++++++++++++++- src/ov_SC04_018/ov_SC04_018_jr_80183E6C.c | 2 +- src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c | 162 +++++- src/ov_SC04_018/ov_SC04_018_jr_8018CC40.c | 2 +- 4 files changed, 697 insertions(+), 37 deletions(-) diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c b/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c index 811a571f6a..ec086645ea 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c @@ -4621,7 +4621,35 @@ void func_8017E1F4(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017E230); + + + + + + + + + + + + + + + + + + +extern void func_8017E26C(void*, u8*); +extern void func_8017E3AC(s32 a0); +void func_8017E230(s32 *a0) +{ + s32 *new_var; + volatile long pad; + new_var = a0; + ((void (*)(s32 *, s32))func_8017E26C)(new_var, ((s32) new_var) + 0xA0); + func_8017E3AC((s32) new_var); +} + DEFINE_func_8017E264() /* dedup: shared engine-core @0x8017E264 (src/shared) */ @@ -4909,7 +4937,30 @@ void func_8017E9C0(void *arg0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017EA0C); + + +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern s32 func_80184BD0(u8 a0, u8 a1, u8 a2, u8 a3); +extern void func_80184CB8(s32*, s32); +extern void func_8017E5CC(void *arg0); + +void func_8017EA0C(void *arg0) { + extern short D_80191074; + s32 v1; + + v1 = *(s32 *)((char *)arg0 + 0xCC); + *(s32 *)((char *)v1 + 0xB0) = 2; + if (func_80184BAC(8, 0x14) == 0) { + *(short *)((char *)arg0 + 0x2) = 1; + func_80184CB8((s32 *)arg0, (s32)&D_80191074); + } + if (func_80184BD0(10, 0, 10, 30) == 0 && func_80184BD0(15, 0, 15, 30) == 0) { + return; + } + *(u8 *)((char *)arg0 + 0x105) = *(u16 *)((char *)arg0 + 0x2); + func_8017E5CC(arg0); +} + extern int func_80178970(void); extern void func_80178D18(void); @@ -5009,7 +5060,42 @@ void func_8017EC10(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017ECF4); + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void func_8012E88C(s32 a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_8012B200(s32); +extern void func_8012B178(s32 a0, s32 a1); + +void func_8017ECF4(void *arg0) { + extern short D_801C7A90; + extern short D_80191074; + extern short D_801B9AA8; + s32 v; + + v = ((s32 (*)())func_8012C1B8)(); + *(s32 *)((s32)arg0 + 0x20) = v; + if (v == 0) { + func_8012CAE4(arg0); + } + func_8001C214(*(s32 *)((s32)arg0 + 0x20), (s32)&D_801C7A90); + *(short *)((s32)arg0 + 2) = 1; + *(short *)((s32)arg0 + 0x34) = 0; + *(short *)(*(s32 *)((s32)arg0 + 0x68) + 0xC) = 0x7FFF; + func_8012E8E0((s32)arg0, (s32)&D_80191074); + func_8012B2CC((s32)arg0); + func_8012E88C((s32)arg0); + func_8012A828((s32 *)arg0, (s32)&D_801B9AA8); + ((void (*)(u8 *))func_8012B200)((u8 *)arg0); + func_8012B178((s32)arg0, (s32)0xFFFC0000); + *(int *)(arg0 + 0x1c) = 0x20; +} + extern s32 func_8012BD14(s32 a0); extern s32 func_80178BF8(); @@ -5182,7 +5268,30 @@ void func_8017F1A8(void) { INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017F1C8); -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017F224); + +extern s32 func_80029504(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_80184CB8(s32*, s32); + +void func_8017F224(void *a0) +{ + extern short D_801912D8; + s32 v1; + s32 flag; + + flag = func_80029504() >= 0x2A8; + if (flag != 0) { + goto skip; + } + v1 = *(s32 *)((char *)a0 + 0xCC); + *(s32 *)((char *)v1 + 0xB0) = 2; +skip: + if (func_80184BAC(8, 0x14) == 0) { + *(short *)((char *)a0 + 0x2) = 1; + func_80184CB8((s32 *)a0, (s32)&D_801912D8); + } +} + extern int func_80178970(void); @@ -5308,7 +5417,19 @@ void *arg0; } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017F564); + + +void func_8017F564(void *a0) { + extern short D_80191578; + extern short D_801B9950; + s32 s0 = (s32)a0; + *(u16 *)((s32)a0 + 2) = 8; + func_8012E8E0((s32)a0, (s32)&D_80191578); + func_8012E88C((s32)a0); + func_80184C90((s32)a0); + func_8012A828((s32 *)a0, (s32)&D_801B9950); +} + extern void (*D_801916E4[])(void); @@ -5564,7 +5685,7 @@ DEFINE_func_8017FAAC() /* dedup: shared engine-core @0x8017FAAC (src/shared) */ extern s32 func_80185BE0(s32 arg0); extern s32 func_80184FA4(s32 a0); extern void func_80184ED4(s32, s32, s32, s32); -extern void func_8017F564(s32 a0); +extern void func_8017F564(); extern u8 D_801E3978[]; void func_8017FB0C(void *a0) @@ -5691,7 +5812,48 @@ DEFINE_func_8017FD88() /* dedup: shared engine-core @0x8017FD88 (src/shared) */ INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017FDE4); -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_8017FE54); + +extern s32 func_801847BC(void *a0, void *a1); +extern s32 func_80184BD0(u8 a0, u8 a1, u8 a2, u8 a3); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012E88C(s32 a0); +extern void func_80184C90(s32 a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_80184CB8(s32 *a0, s32 a1); +extern s32 func_801788B8(s32 a0, s32 a1); +extern s32 func_8017F418(); + +void func_8017FE54(void *a0) { + extern s16 D_80191580; + extern short D_80191578; + extern s16 D_80191570; + extern short D_801B9950; + + s32 s0 = (s32)a0; + s32 v0; + s32 v1; + + if (func_801847BC(a0, &D_80191580) == 0) { + return; + } + + if (func_80184BD0(0xB, 0, 0xE, 0xF) != 0) { + *(s16 *)(s0 + 2) = 8; + func_8012E8E0(s0, (s32)&D_80191578); + func_8012E88C(s0); + func_80184C90(s0); + func_8012A828((s32 *)s0, (s32)&D_801B9950); + } else { + v0 = func_80184BD0(0xE, 0xF, 0x17, 0); + *(s16 *)(s0 + 2) = (v0 == 0) ? 1 : 2; + func_80184CB8((s32 *)s0, (s32)&D_80191570); + } + + v1 = *(s32 *)(s0 + 0x68); + *(s16 *)(v1 + 0xC) = 0x7FFF; + *(s32 *)(s0 + 0xD4) = func_801788B8(s0, (s32)&func_8017F418); +} + extern void (*D_80191814[])(void); @@ -5946,9 +6108,41 @@ void func_80180580(void *arg0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801805C0); -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80180618); + +void func_801805C0(s32 arg0) { + extern void func_80185F54(void*, s32, s32); + extern s32 func_80185BE0(s32); + extern s32 func_80184FA4(s32); + extern void func_801803BC(void*); + + ((void (*)(s32, s32, s32))func_80185F54)(arg0, 0xC, 1); + if (func_80185BE0(0xC) != 0) { + if (((s32 (*)(s32))func_80184FA4)(arg0) != 0) { + ((void (*)(s32))func_801803BC)(arg0); + } + } +} + + + + +void func_80180618(void *arg0) { + extern short D_801B65C8; + extern s32 func_80184FA4(s32); + extern s32 func_80184BAC(s32 arg0, s32 arg1); + extern void func_8018042C(s32 a0); + extern void func_80184ED4(s32, s32, s32, s32); + + if (((s32 (*)(void))func_80184FA4)() != 0) { + if (func_80184BAC(9, 0x11) == 0) { + func_8018042C(arg0); + } else { + func_80184ED4((s32)arg0, (s32)&D_801B65C8, 0, 0x40); + } + } +} + extern int func_80178970(void); extern s32 D_801B9DF8; @@ -5968,7 +6162,29 @@ void * arg0; } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801806CC); + + +extern void func_80185F54(void *, s32, s32); +extern s32 func_80185BE0(s32); +extern s32 func_80184FA4(s32); +extern void func_80184CB8(s32 *, s32); +extern void func_80185FB8(s32, s32, s32); + +void func_801806CC(void *arg0) { + extern short D_801918F4; + + func_80185F54(arg0, 0xC, 1); + if (func_80185BE0(0xC) == 0) { + return; + } + if (((s32 (*)(s32))func_80184FA4)((s32)arg0) == 0) { + return; + } + *(u16 *)((char *)arg0 + 2) = 1; + func_80184CB8((s32 *)arg0, (s32)&D_801918F4); + func_80185FB8((s32)arg0, 0xC, 1); +} + extern s32 func_801847BC(void *a0, void *a1); extern s32 func_80184BAC(s32 a0, s32 a1); @@ -6366,7 +6582,51 @@ void func_80180EE8(void *a0) } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80180F7C); + + +extern s32 func_80029504(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern s32 func_80184DD0(s32 a0); +extern void func_80180954(void *arg0); + +void func_80180F7C(void *arg0) +{ + s32 dd; + s32 sel; + s32 code; + s32 a0val; + + dd = func_80184DD0((s32)arg0); + sel = func_80029504(); + + if (dd == 2 && sel < 0x276) { + a0val = 0xA; + } else { + if (func_80184BAC(0xA, 0x10) != 0) { + code = 0; + goto ladder_done; + } + a0val = 0x10; + } + if (func_80184BAC(a0val, 0x16) != 0) { + code = 1; + } else { + code = 2; + } +ladder_done: + + switch (code) { + case 0: + break; + case 1: + func_80180954(arg0); + break; + case 2: + func_80180954(arg0); + break; + } +} + extern int func_80178970(void); extern void func_80178D18(void); @@ -6516,7 +6776,26 @@ void func_80181364(s32 a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801813A4); + + +extern s32 func_8012E544(s32 a0); + +void func_801813A4(void *a0) +{ + s32 temp; + s32 ok; + + temp = func_8012E544(0x2A0); + if (temp == 0) { + ok = 0; + } else { + ok = *(u16 *)(temp + 2) == 3; + } + if (ok != 0) { + func_801812D0(a0); + } +} + extern s32 func_8012E544(s32 a0); extern void func_80184CB8(s32 *a0, s32 a1); @@ -6555,7 +6834,38 @@ void func_80181474(void * arg0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801814C4); + + +extern s32 func_801847BC(void *a0, void *a1); +extern s32 func_8012E544(s32 a0); +extern void func_80184CB8(s32 *a0, s32 a1); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern short D_80191AB8; +extern short D_80191AB0; +extern s32 func_80181564(void *a0); + +void func_801814C4(void *a0) +{ + void *s0 = a0; + void *v1; + s32 res; + s32 flag; + + if (func_801847BC(a0, &D_80191AB8) != 0) { + res = func_8012E544(0x2A0); + if (res == 0) { + flag = 0; + } else { + flag = (*(u16 *)((char *)res + 2) == 3); + } + *(short *)((char *)s0 + 0x2) = (flag != 0) ? 2 : 1; + func_80184CB8((s32 *)s0, (s32)&D_80191AB0); + v1 = *(void **)((char *)s0 + 0x68); + *(s16 *)((char *)v1 + 0xC) = 0x7FFF; + *(s32 *)((char *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)&func_80181564); + } +} + extern void func_80172710(void); @@ -6622,7 +6932,22 @@ extern void func_80184CB8(s32*, s32); } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80181738); + + +void func_80181738(void *arg0) { + extern short D_801B99A8; + extern void func_8012E88C(s32); + extern void func_8012A828(s32 *a0, s32 a1); + extern void func_80184C90(s32); + + *(short *)((char *)arg0 + 0x2) = 8; + func_8012E88C((s32)arg0); + func_8012A828((s32 *)arg0, (s32)&D_801B99A8); + func_80184C90((s32)arg0); + func_801819B0(); + *(short *)((char *)arg0 + 0x34) = 0; +} + DEFINE_func_8018178C() /* dedup: shared engine-core @0x8018178C (src/shared) */ @@ -6655,7 +6980,18 @@ void func_80181924(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80181960); + + +extern s32 D_801D2200; +extern s32 D_801D7598; +extern s32 D_801E7018; +extern void func_8001C97C(s32 *arg); + +void func_80181960() { + func_8001C97C(&D_801D7598); + D_801E7018 = D_801D2200; +} + DEFINE_func_80181998() /* dedup: shared engine-core @0x80181998 (src/shared) */ @@ -7016,7 +7352,88 @@ extern void func_80184CB8(s32 *a0, s32 a1); } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801821D4); + + +extern s32 func_801847BC(void *a0, void *a1); +extern s32 func_80184DD0(s32 a0); +extern s32 func_80029504(void); +extern s32 func_80184BAC(s32 a0, s32 a1); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012E88C(s32 a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_80184C90(s32 a0); +extern void func_80184CB8(s32 *a0, s32 a1); +extern s32 func_801788B8(s32 a0, s32 a1); +extern s32 func_80182544(void *a0); +extern s32 func_801825BC(void *a0); + +extern s16 D_80191C18; +extern s16 D_80191C10; +extern s16 D_80191C08; +extern s16 D_801B9B50; + +void func_801821D4(void *a0) +{ + s32 state; + s32 hp; + s32 v0; + s32 v1; + register s32 arg0 __asm__("$4"); + void *ptr; + + if (func_801847BC(a0, (void *)&D_80191C18) != 0) { + /* func_80184DD0 takes no argument at this call site; the TU's file-scope + * prototype declares one, so call through a no-parameter pointer type + * (the TU's own idiom, cf. ((void (*)(s32, s32))func_80184CB8)(...)). */ + state = ((s32 (*)(void))func_80184DD0)(); + hp = func_80029504(); + + arg0 = 0xA; + if (state == 2 && hp < 0x276) { + goto call15; + } + v0 = func_80184BAC(arg0, 0x10); + if (v0 != 0) { + v1 = 0; + goto dispatch; + } + arg0 = 0x10; + call15: + v0 = func_80184BAC(arg0, 0x15); + if (v0 != 0) { + v1 = 1; + } else { + v1 = 2; + } + + dispatch: + switch (v1) { + case 0: + *(s16 *)((char *)a0 + 2) = 3; + func_8012E8E0((s32)a0, (s32)&D_80191C10); + func_8012E88C((s32)a0); + func_8012A828((s32 *)a0, (s32)&D_801B9B50); + func_80184C90((s32)a0); + break; + case 1: + v0 = 5; + goto store; + case 2: + v0 = 1; + store: + *(s16 *)((char *)a0 + 2) = v0; + func_80184CB8((s32 *)a0, (s32)&D_80191C08); + break; + } + + ptr = *(void **)((char *)a0 + 0x68); + *(s16 *)((char *)ptr + 0xC) = 0x7FFF; + *(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_80182544); + func_8012E8E0(*(s32 *)((char *)a0 + 0xD4), (s32)&D_80191C08); + *(s32 *)((char *)a0 + 0xD8) = func_801788B8((s32)a0, (s32)&func_801825BC); + } +} + DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */ @@ -7469,7 +7886,18 @@ void func_80182C98(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80182CD4); + + +extern s32 D_801D7E84; +extern s32 D_801D6C98; +extern s32 D_801E7028; +extern void func_8001C97C(s32 *arg); + +void func_80182CD4(void) { + func_8001C97C(&D_801D7E84); + D_801E7028 = D_801D6C98; +} + DEFINE_func_80182D0C() /* dedup: shared engine-core @0x80182D0C (src/shared) */ @@ -7628,7 +8056,48 @@ void func_80182F88(s32 a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80183024); + + +extern s32 func_801847BC(void *a0, void *a1); +extern void func_80182CD4(void); +extern void func_80182D0C(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_8012E8E0(s32, s32); +extern void func_8012E88C(s32); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_80184C90(s32); +extern void func_80184CB8(s32*, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801830F4(void *a0); + +void func_80183024(void *a0) { + extern u8 D_80191F24[]; + extern short D_80191F1C; + extern short D_801C0D40; + extern short D_80191F14; + s32 v0; + void *v1; + + if (func_801847BC(a0, &D_80191F24[0]) != 0) { + func_80182CD4(); + func_80182D0C(); + v0 = func_80184BAC(7, 0xE); + if (v0 != 0) { + *(s16 *)((char *)a0 + 0x2) = 3; + func_8012E8E0((s32)a0, (s32)&D_80191F1C); + func_8012E88C((s32)a0); + func_8012A828((s32 *)a0, (s32)&D_801C0D40); + func_80184C90((s32)a0); + } else { + *(s16 *)((char *)a0 + 0x2) = 1; + func_80184CB8((s32 *)a0, (s32)&D_80191F14); + } + v1 = *(void **)((char *)a0 + 0x68); + *(s16 *)((char *)v1 + 0xC) = 0x7FFF; + *(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_801830F4); + } +} + extern s32 func_8012BD14(s32 a0); extern s32 func_8012E544(s32 a0); @@ -7722,7 +8191,28 @@ void func_80183248(s32 a0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801832A8); + + +extern short D_801B9AA8; +extern u8 D_801B6730[]; +extern void func_8012A828(s32*, s32); +extern void func_8012E88C(s32); +extern void func_80184C90(s32); +extern void func_80184ED4(s32, s32, s32, s32); + +void func_801832A8(arg0) +void *arg0; +{ + extern short D_801B9AA8; + extern u8 D_801B6730[]; + *(short *)((char *)arg0 + 0x2) = 7; + func_8012E88C((s32)arg0); + func_8012A828((s32 *)arg0, (s32)&D_801B9AA8); + func_80184C90((s32)arg0); + *(short *)((char *)arg0 + 0x34) = 0; + func_80184ED4((s32)arg0, (s32)&D_801B6730, 1, 0x40); +} + extern void func_80184CB8(s32 *a0, s32 a1); extern short D_80192030; @@ -8056,7 +8546,45 @@ void func_80183C78(s32 a0) } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80183CBC); + + +extern s32 func_801847BC(void *a0, void *a1); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_8012E88C(s32 a0); +extern void func_8012A828(s32 *a0, s32 a1); +extern void func_80184C90(s32 a0); +extern void func_80184ED4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80184CB8(s32 *a0, s32 a1); +extern s32 func_80183D80(void *a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); + +void func_80183CBC(void *arg0) { + + extern s32 D_80192160; + extern s32 D_801B9C50; + extern s32 D_801B67DC; + extern s32 D_80192150; + void *s0 = arg0; + void *v1; + + if (func_801847BC(arg0, &D_80192160) != 0) { + if (func_80184BAC(9, 0x11) != 0) { + *(short *)((char *)s0 + 0x2) = 3; + func_8012E88C((s32)s0); + func_8012A828((s32 *)s0, (s32)&D_801B9C50); + func_80184C90((s32)s0); + func_80184ED4((s32)s0, (s32)&D_801B67DC, 0, 0x40); + } else { + *(short *)((char *)s0 + 0x2) = 1; + func_80184CB8((s32 *)s0, (s32)&(*(s16 *)&D_80192150)); + } + + v1 = *(void **)((char *)s0 + 0x68); + *(short *)((char *)v1 + 0xC) = 0x7FFF; + *(s32 *)((char *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)&func_80183D80); + } +} + extern s32 func_8012BD14(s32 a0); diff --git a/src/ov_SC04_018/ov_SC04_018_jr_80183E6C.c b/src/ov_SC04_018/ov_SC04_018_jr_80183E6C.c index 1636d26f4f..8edc635eff 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_80183E6C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_80183E6C.c @@ -2821,7 +2821,7 @@ extern void func_8017FAAC(void *a0); extern s32 func_80185BE0(s32 arg0); extern s32 func_80184FA4(s32 a0); extern void func_80184ED4(s32, s32, s32, s32); -extern void func_8017F564(s32 a0); +extern void func_8017F564(); extern u8 D_801E3978[]; extern void func_8017FB0C(void *a0); extern s32 func_80185BE0(s32 a0); diff --git a/src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c b/src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c index b6bb43b255..af1356cbff 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c @@ -4079,7 +4079,49 @@ void func_8018A0B4(void) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80188E1C", func_8018A168); + + +extern s32 D_801E7984; + +void func_8018A168(a0, a1) +s32 a0; +s32 a1; +{ + extern s32 D_801E7984; + register s32 rv __asm__("$2"); + s32 x = ((s32 *)&D_801E7984)[0]; + s32 y = a1; + s32 d; + + if (y < a0) { + if (x < y) { + x = x + 0x5A0; + } + y = y + 0x5A0; + } + if (a0 >= x) { + rv = -1; + goto done; + } + if (x >= y) { + rv = -1; + goto done; + } + d = x - a0; + if (d < 16) { + rv = d * 2; + goto done; + } + d = y - x; + if (d < 16) { + rv = d * 2; + goto done; + } + rv = 31; +done: + __asm__("" :: "r"(rv)); +} + extern s32 (*D_801E0498[])(); extern s32 D_801E7980; @@ -4503,7 +4545,7 @@ void func_8018AB78(void) extern s32 D_801E01F0; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018ACD4(void) { D_801E7980 = &D_801E01F0; @@ -4511,7 +4553,7 @@ void func_8018ACD4(void) { } -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); extern s32 D_801E0228; extern s32 D_801E7980; void func_8018AD08(void) { @@ -4527,7 +4569,7 @@ DEFINE_func_8018AD3C() /* dedup: shared engine-core @0x8018AD3C (src/shared) */ extern s32 D_801E0288; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018AD70(void) { D_801E7980 = &D_801E0288; @@ -4538,7 +4580,7 @@ void func_8018AD70(void) { extern s32 D_801E02C0; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018ADA4(void) { D_801E7980 = &D_801E02C0; @@ -4549,7 +4591,7 @@ void func_8018ADA4(void) { s32 func_8018ADD8(void) { extern s32 D_801E02F8; extern s32 D_801E7980; - extern void func_8018A168(s32 arg0, s32 arg1); + extern void func_8018A168(); s32 s0; D_801E7980 = (s32)&D_801E02F8; @@ -4567,7 +4609,7 @@ s32 func_8018ADD8(void) { extern s32 D_801E0338; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018AE4C(void) { D_801E7980 = &D_801E0338; @@ -4576,7 +4618,7 @@ void func_8018AE4C(void) { extern s32 func_80029504(void); -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); extern s32 D_801E0370; extern s32 D_801E7980; @@ -4594,7 +4636,7 @@ s32 func_8018AE80(void) { extern s32 D_801E0390; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018AECC(void) { D_801E7980 = &D_801E0390; @@ -4608,7 +4650,7 @@ DEFINE_func_8018AF00() /* dedup: shared engine-core @0x8018AF00 (src/shared) */ extern s32 D_801E0440; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018AF34(void) { D_801E7980 = &D_801E0440; @@ -4619,7 +4661,7 @@ void func_8018AF34(void) { extern s32 func_80029504(void); -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); s32 func_8018AF68(void) { @@ -4637,7 +4679,7 @@ s32 func_8018AF68(void) { extern s32 D_801E0488; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); void func_8018AFB4(void) { D_801E7980 = &D_801E0488; @@ -4985,7 +5027,17 @@ s32 func_8018B8B0(void) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80188E1C", func_8018B904); + + +extern s32 func_8018B8B0(); + +void func_8018B904(void *a0) { + *(s32 *)(*(s32 *)((char *)a0 + 0xCC) + 0xB0) = 1; + if (func_8018B8B0() == 0) { + func_8018B868(a0); + } +} + extern s32 func_8018B8B0(void); @@ -5229,7 +5281,26 @@ void func_8018BF64(void *arg0) { } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80188E1C", func_8018BFCC); + + +extern s32 func_80184BAC(s32 arg0, s32 arg1); + +void func_8018BFCC(void *arg0) { + register s32 *s0 asm("$16") = arg0; + s32 v0, v1; + *(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 1; + v0 = func_80184BAC(6, 0x12); + if (v0 != 0) { + v1 = 1; + } else { + v0 = func_80184BAC(0x12, 0x15); + v1 = (v0 != 0) ? 2 : 0; + } + if (v1 != 1) { + func_8018BE0C(s0); + } +} + #include "common.h" @@ -5311,7 +5382,68 @@ extern void func_80184CB8(s32*, s32); } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_80188E1C", func_8018C278); + + +extern s32 func_80029504(void); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern s32 func_80184D00(void); +extern s32 func_80184BAC(s32 arg0, s32 arg1); +extern void func_80184CB8(s32*, s32); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_8018C3F0(void*); + +void func_8018C278(void *a0) { + + extern short D_801E06A8; + void *s0 = a0; + s32 v0; + s32 v1; + void *v1p; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((u8 *)s0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(s0); + } + func_8001C214(*(s32 *)((u8 *)s0 + 0x20), 0); + + v1 = func_80029504(); + if (v1 < 0xC8) { + v0 = func_80184D00(); + if (v0 == 3) { + v0 = 2; + } else { + v0 = func_80184BAC(0xA, 0x10); + if (v0 != 0) { + v0 = 1; + } else { + v0 = 2; + } + } + } else if (v1 < 0x258) { + func_8012CAE4(s0); + return; + } else if (v1 < 0x384) { + if (v1 < 0x276) { + func_8012CAE4(s0); + return; + } + v0 = 1; + } else { + v0 = 1; + } + + *(s16 *)((u8 *)s0 + 0x2) = (s16)v0; + __asm__ __volatile__(""); + func_80184CB8((s32 *)s0, (s32)&D_801E06A8); + + v1p = *(void **)((u8 *)s0 + 0x68); + *(s16 *)((u8 *)v1p + 0xC) = 0x7FFF; + *(s32 *)((u8 *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)&func_8018C3F0); +} + extern void (*D_801E077C[])(void); diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8018CC40.c b/src/ov_SC04_018/ov_SC04_018_jr_8018CC40.c index 8134bd96d8..ba172c918a 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8018CC40.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8018CC40.c @@ -3138,7 +3138,7 @@ extern void (*D_801E0554[])(void); extern void func_8018AB3C(void *a0); extern s32 D_801E01F0; extern s32 D_801E7980; -extern void func_8018A168(s32 arg0, s32 arg1); +extern void func_8018A168(); extern void func_8018ACD4(void); extern void func_8018AD08(void); extern s32 D_801E0260;