diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c index 15645d001..553038e37 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c @@ -5590,7 +5590,23 @@ void func_8017FFB4(s32 arg0) -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_801800F4); +extern s32 func_8012B864(s32 a0); +extern void func_80180188(s32 param_1); + +void func_801800F4(s32 param_1) +{ + s32 v0; + + *(s32 *)(param_1 + 0x4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0x4); + *(s16 *)(param_1 + 0xA) = *(u16 *)(*(s32 *)(param_1 + 0x64) + 0xA) - *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xF0); + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + v0 = func_8012B864(param_1); + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = v0; + if (*(s32 *)(param_1 + 0xF4) != 0) { + func_80180188(param_1); + } +} + extern s32 D_801C7EC0; diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c index a6f44dd33..953e9d72e 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017F690.c @@ -4004,7 +4004,28 @@ void func_80181F3C(s32 a0) { INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80181F80); -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_801822A4); +extern void func_8012A828(s32 a0, void *a1); + +void func_801822A4(void *a0) { + + extern u8 D_801A1C10[]; + extern u8 D_801A2848[]; + + if (*(s16 *)((s32)a0 + 0x70) == 0) { + *(s16 *)((s32)a0 + 2) = 4; + *(u16 *)((s32)a0 + 0x34) = 0; + func_8012A828((s32)a0, D_801A1C10); + *(s32 *)((s32)a0 + 0x1C) = 0x18; + *(u16 *)((s32)a0 + 0x100) |= 4; + } else { + *(s16 *)((s32)a0 + 2) = 4; + *(u16 *)((s32)a0 + 0x34) = 3; + func_8012A828((s32)a0, D_801A2848); + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(u16 *)((s32)a0 + 0x100) |= 4; + } +} + INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80182328); diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8017CF90.c b/src/ov_SC02_005/ov_SC02_005_jr_8017CF90.c index d7aab5341..b220087fb 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8017CF90.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8017CF90.c @@ -4999,7 +4999,24 @@ void func_80180C64(void *a0) { } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8017CF90", func_80180CA0); + +extern void func_8017E6FC(void); +extern s16 D_800B9AAC[]; +extern s16 D_801E4C50; +extern Blk8 D_80194554; + +void func_80180CA0(s32 a0) { + register Blk8 *s __asm__("$5"); + register Blk8 *d __asm__("$4"); + + s = &D_80194554; + d = &D_801E4C50; + *(Blk8 *)d = *(Blk8 *)s; + D_800B9AAC[0] = 0xFFE; + func_8017E6FC(); + *(u8 *)(a0 + 0x214) += 1; +} + void func_80180D18(s32 a0) { s32 s0 = a0; diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c b/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c index 0b8ee7362..0b10668c7 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c @@ -4957,7 +4957,32 @@ void func_80180DF4(void *arg0) { } -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8017D604", func_80180E90); +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_80183480(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 D_801BD8B0; +extern s32 D_80189884; +extern s32 D_801BDC00; + +void func_80180E90(void *arg0) { + extern s16 D_80189850; + s32 v0; + + *(short *)((char *)arg0 + 0x2) = 6; + func_8012E8E0((s32)arg0, (s32)&D_80189850); + func_8012E88C((s32)arg0); + func_8012A828((s32)arg0, (s32)&D_801BD8B0); + + v0 = (s32)&D_80189884 | 0x40000000; + *(s32 *)((char *)arg0 + 0x58) = v0; + *(short *)((char *)arg0 + 0x5C) = 0x800; + *(short *)((char *)arg0 + 0x34) = 0; + *(s32 *)((char *)arg0 + 0x1C) = 0; + + func_80183480((s32)arg0, (s32)&D_801BDC00, 0, 0x60); +} + extern s32 func_80029178(s32 a0); extern s32 func_80029504(void); diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8017C730.c b/src/ov_SC03_013/ov_SC03_013_jr_8017C730.c index 3fedd4492..471addc44 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8017C730.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8017C730.c @@ -4018,7 +4018,29 @@ s32 func_8017EE28(s32 a0, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017EEA4); +extern s32 func_80135888(s32, s32, s32, s32); +extern void func_8012F568(s32, s32, s32, s32, s32, s32); +extern s32 D_80126B58; +extern u8 D_801152A8[]; + +s32 func_8017EEA4(s32 a0, s32 a1, s32 a2) +{ + register s32 t __asm__("$16"); + s32 *base; + + t = a2; + base = &D_80126B58; + if (a0 != 0 && *(s16 *)(a0 + 0xAA) != 0) + return 0; + + if (func_80135888(base[8], base[14] | 0x10000000, a1, t) != 0) + { + func_8012F568(1, 1, 0, 10, t, (s32)&D_801152A8); + return 1; + } + return 0; +} + extern void func_8017E6F4(s32 a0); extern void func_8002D59C(s32 a0, u16 a1, s32 a2); diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c b/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c index 43b17e3b6..54c9fa48b 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c @@ -5826,7 +5826,30 @@ void func_8017FB74(void *arg0) { } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8017AE2C", func_8017FC58); +extern s32 D_801E1A18; +extern u8 D_8018F4B8[]; +extern s32 func_8017B368(); +extern s32 func_80178970(void); +extern void func_80178D18(void); +extern s16 D_8018F498; +extern s32 D_8018F478; +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012E88C(s32 a0); +extern void func_8012A828(s32 a0, s32 a1); + +void func_8017FC58(void *arg0) { + if (D_801E1A18 == 1) { + ((void (*)(s32, s32))func_8017B368)((s32)arg0, (s32)D_8018F4B8); + } + if (((s32 (*)(void *))func_80178970)(arg0) != 0) { + ((void (*)(s32))func_80178D18)((s32)arg0); + *(s16 *)((s32)arg0 + 2) = 2; + func_8012E8E0((s32)arg0, (s32)&D_8018F498); + func_8012E88C((s32)arg0); + func_8012A828((s32)arg0, (s32)&D_8018F478); + } +} + extern void func_801851D8(s32 arg); void func_8017FCE4(void) { diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c index c3b3104f0..782ced3f3 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c @@ -8466,7 +8466,23 @@ void func_801862A4(s32 _arg0) } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80186300); +#include "common.h" + +extern u16 D_801EFD40; +extern void func_80186470(void *a0); +extern void func_8018637C(s32 arg0, s32 arg1); + +void func_80186300(s32 a0, void *a1, s32 a2) { + register s32 s1 __asm__("$17") = a2; + + D_801EFD40 = D_801EFD40 & 0xFFFB; + func_80186470((void *)a0); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = (u16)s1; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) = 0; + func_8018637C(a0, (s32)a1); +} + extern void func_8012A828(); extern u16 D_801EFD40; diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8017AE2C.c b/src/ov_SC04_015/ov_SC04_015_jr_8017AE2C.c index ceb1d60f6..26b6dc9f1 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_8017AE2C.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_8017AE2C.c @@ -6054,7 +6054,28 @@ void func_80180398(void *a0) { } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8017AE2C", func_801803D4); +extern void func_8012C194(void); +extern void func_8001CEC0(s32 a0, s32 a1); +extern u8 D_80188BC4[]; +extern void func_80180440(s32 param_1); +extern s32 func_8012AD50(void *arg0); + +void func_801803D4(void *param_1) +{ + s32 s0; + + s0 = ((s32 (*)(void))func_8012C194)(); + *(s32 *)((s32)param_1 + 0x20) = s0; + if (s0 != 0) { + func_8001CEC0(s0, (s32)D_80188BC4); + *(s16 *)(s0 + 0x2C) = 3; + *(s16 *)((s32)param_1 + 0xFC) = 0; + *(s16 *)((s32)param_1 + 0xFE) = 0; + func_80180440((s32)param_1); + func_8012AD50(param_1); + } +} + #include "common.h" diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c b/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c index fe12c571c..81e6fab3a 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c @@ -8340,7 +8340,28 @@ void func_80183574(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801835B0); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern s16 D_801AECB4; + +void func_801835B0(void *a0, s32 a1) +{ + s32 end; + s32 ret; + s16 v1; + + end = a1 + 8; + do { + __asm__("");__asm__("");__asm__("");__asm__("");__asm__("");__asm__("");__asm__(""); + *(u16 *)((s32)a0 + 0xFC) = *(u16 *)(a1 + 2); + ret = func_8012C658(0x268, *(s16 *)(a1 + 0), (s32)a0); + v1 = *(s16 *)((s32)a0 + 0x70); + if (v1 == 0 && a1 == end) { + *(s32 *)&D_801AECB4 = ret; + } + a1 += 4; + } while (*(s16 *)(a1 + 0) != -1); +} + extern void (*D_8018C7FC[])(void); diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.c b/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.c index 7790117c0..bdbce7661 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8017EEC4.c @@ -3482,7 +3482,39 @@ void func_8017FF4C(s32 arg0, s16 *arg1, s32 arg2) { INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_80180020); -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_80180284); +/* Declarations are BLOCK-scope on purpose (this TU's house style, cf. the + * block-scope decl layers at func_80180300 and neighbours in this file). + * A file-scope prototype for func_8012A828 here would become visible to + * func_80181C74, which deliberately calls `func_8012A828()` with no + * arguments behind a no-prototype decl -- a file-scope prototype turns that + * call into a hard `too few arguments` error and fails the whole-binary gate + * even though this function itself is byte-identical. */ +s32 func_80180284(void) +{ + extern void func_8012E8E0(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_80029124(s32 a0, s32 a1); + extern s32 D_801270CC; + extern s16 D_801B1710; + extern s16 D_801B1714; + extern u8 D_801889F8[]; + extern u8 D_801A01A4[]; + + register void *arg0 __asm__("$4"); + void *s0; + + s0 = arg0; + *(u16 *)((s32)s0 + 0x2) = 2; + *(u16 *)((s32)s0 + 0x34) = 0; + func_8012E8E0((s32)s0, (s32)&D_801889F8); + func_8012A828((s32)s0, &D_801A01A4); + *(s32 *)((s32)s0 + 0x1C) = 5; + D_801270CC = 1; + D_801B1710 = 0; + D_801B1714 = 0; + func_80029124(0x11E, 0); +} + #include "common.h" diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8017BEBC.c b/src/ov_SC07_001/ov_SC07_001_jr_8017BEBC.c index cf10d5016..aa94d8c3f 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8017BEBC.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8017BEBC.c @@ -5398,7 +5398,32 @@ void func_80180B90(void *a0) { } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180C2C); +extern s16 D_801AAD8C; +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern u16 D_80126BE2; +extern u16 D_80126BE4; +extern u8 D_80126BE0[]; +extern void func_8012E014(s32 a0); + +void func_80180C2C(void *a0) +{ + u16 t; + + if (*(u16 *)&D_801AAD8C == 3) { + t = *(u16 *)&D_801AAD8C + 1; + *(u16 *)((s32)a0 + 0x34) = 0; + *(s16 *)&D_801AAD8C = t; + } + if (*(u8 *)((s32)a0 + 0x74) != 0) { + func_8012E014((s32)a0); + *(u16 *)&D_80126BE0[0] = D_80126B5E; + D_80126BE2 = D_80126B62; + D_80126BE4 = D_80126B66; + } +} + extern s32 func_8012C1B8(void); extern void func_8012CAE4(void *a0); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c index bb317dc8a..30323ed4a 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c @@ -6838,7 +6838,37 @@ void func_80181B98(s32 param_1) } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_80181C54); +void func_80181C54(void *a0) +{ + extern s32 D_80186088; + extern void func_800134FC(s32, void *, void *); + extern void func_8001382C(s32, void *, void *); + s32 *s = (s32 *)a0; + s32 *tbl = &D_80186088; + s16 sp10[8]; + register s32 v0 __asm__("$2"); + register s32 vT3 __asm__("$4"); + u16 v1; + + *tbl = -(*(s32 *)(s + 0xB) << 18); + func_800134FC(*(s16 *)((s8 *)a0 + 0x30), tbl - 2, sp10); + func_8001382C(*(s16 *)((s8 *)a0 + 0x32), sp10, sp10); + + v0 = *(s32 *)&sp10[0]; + v1 = *(u16 *)((s8 *)a0 + 2); + *(s32 *)(s + 4) = v0; + v0 = *(s32 *)&sp10[2]; + v1 = v1 + 1; + *(s32 *)(s + 5) = v0; + __asm__ __volatile__("" ::: "memory"); + vT3 = *(s32 *)&sp10[4]; + v0 = 8; + *(s32 *)(s + 7) = v0; + __asm__ __volatile__("" ::: "memory"); + *(u16 *)((s8 *)a0 + 2) = v1; + *(s32 *)(s + 6) = vT3; +} + void func_80181CDC(void *a0) { extern void func_8012931C(void *a0);