From 375238f6df520ff8895ab5b7e2e156a441d26995 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:57:37 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20parallel=20gate=20=E2=80=94=207?= =?UTF-8?q?1=20fns=20across=2047=20binaries=20(10=20workers)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ov_SC02_028 func_8018754C ov_SC02_005 func_8018BFBC ov_SC02_026 func_8017F390 func_8017F538 ov_SC02_035 func_801803A4 ov_SC03_015 func_8017DD7C ov_SC02_031 func_80181AE0 ov_SC03_023 func_8017DAD0 ov_SC03_093 func_8017F768 ov_SC03_095 func_8017DD30 ov_SC03_029 func_80187118 ov_SC03_089 func_80184A08 func_8018545C ov_SC03_091 func_80184B28 func_8018558C func_80187954 ov_SC03_096 func_8017EDAC func_8017F308 ov_SC03_090 func_80183C3C func_80184958 func_80186AAC func_8018AA88 ov_SC03_024 func_8017DD7C ov_SC03_100 func_80180E18 ov_SC03_104 func_80181AD0 func_80181CA8 func_80181EA0 func_801827EC ov_SC03_112 func_8018172C ov_SC03_110 func_8017FB14 func_80180AF0 ov_SC03_108 func_8017F788 func_8017FD08 ov_SC03_101 func_801807F4 func_80181374 ov_SC03_097 func_80180294 func_801803FC ov_SC03_115 func_8017E998 func_8017EFB8 ov_SC03_124 func_801836B8 ov_SC03_119 func_8017DD7C ov_SC03_114 func_8017D740 ov_SC03_125 func_80180230 ov_SC03_118 func_8017DD7C ov_SC04_007 func_8017F01C ov_SC04_010 func_8017D6C4 ov_SC04_020 func_8017FAD4 ov_SC04_005 func_8017F5E0 ov_SC04_019 func_8018B2B8 func_8018B400 ov_SC05_001 func_80184028 func_80184430 ov_SC05_006 func_8017F16C ov_SC05_004 func_8017F188 ov_SC05_010 func_80187B80 ov_SC05_007 func_8017F568 ov_SC06_000 func_8017DD7C ov_SC06_024 func_80186CF0 ov_SC06_020 func_801808F4 func_8018348C func_801834F0 ov_SC06_018 func_80188234 func_8018931C ov_SC06_022 func_8017F9FC func_801809D4 func_80184818 func_80187414 ov_SC06_033 func_80187E08 ov_SC07_002 func_8018672C ov_SC07_009 func_8017CFC0 ov_SC06_030 func_8017DE08 --- src/ov_SC02_005/ov_SC02_005_jr_80181D30.c | 7 ++- src/ov_SC02_026/ov_SC02_026_jr_8017C180.c | 42 ++++++++++++- src/ov_SC02_028/ov_SC02_028_jr_80184BD8.c | 19 +++++- src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c | 26 +++++++- src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c | 21 ++++++- src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.c | 15 ++++- src/ov_SC03_023/ov_SC03_023_jr_8017AE2C.c | 26 +++++++- src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c | 15 ++++- src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c | 55 ++++++++++++++++- src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c | 36 +++++++++-- src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c | 50 +++++++++++++++- src/ov_SC03_090/ov_SC03_090_jr_80188274.c | 17 +++++- src/ov_SC03_091/ov_SC03_091_jr_8018326C.c | 50 +++++++++++++++- src/ov_SC03_093/ov_SC03_093_jr_8017D898.c | 17 +++++- src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c | 17 +++++- src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c | 46 +++++++++++++- src/ov_SC03_097/ov_SC03_097_jr_8017D898.c | 24 +++++++- src/ov_SC03_100/ov_SC03_100_jr_8017D898.c | 18 +++++- src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c | 25 +++++++- src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c | 49 ++++++++++++++- src/ov_SC03_104/ov_SC03_104_jr_80182038.c | 16 ++++- src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c | 43 ++++++++++++- src/ov_SC03_108/ov_SC03_108_jr_8017F83C.c | 19 +++++- src/ov_SC03_110/ov_SC03_110_jr_8017D898.c | 43 ++++++++++++- src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c | 26 ++++++-- src/ov_SC03_112/ov_SC03_112_jr_8017C294.c | 43 ++++++++++++- src/ov_SC03_114/ov_SC03_114_jr_8017BEBC.c | 26 +++++++- src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c | 73 +++++++++++++++++++++-- src/ov_SC03_118/ov_SC03_118_jr_8017AE2C.c | 15 ++++- src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c | 15 ++++- src/ov_SC03_124/ov_SC03_124_jr_80181B44.c | 10 +++- src/ov_SC03_125/ov_SC03_125_jr_8017D604.c | 37 +++++++++++- src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c | 23 ++++++- src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c | 23 ++++++- src/ov_SC04_010/ov_SC04_010_jr_8017BEBC.c | 10 +++- src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c | 43 ++++++++++++- src/ov_SC04_020/ov_SC04_020_jr_8017D604.c | 37 +++++++++++- src/ov_SC05_001/ov_SC05_001_jr_80183508.c | 49 ++++++++++++++- src/ov_SC05_004/ov_SC05_004_jr_8017BEBC.c | 23 ++++++- src/ov_SC05_006/ov_SC05_006_jr_8017BEBC.c | 66 +++++++++++++++++++- src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c | 25 +++++++- src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c | 8 ++- src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c | 15 ++++- src/ov_SC06_018/ov_SC06_018_jr_80187AEC.c | 61 ++++++++++++++++++- src/ov_SC06_020/ov_SC06_020_jr_801803E0.c | 12 +++- src/ov_SC06_020/ov_SC06_020_jr_80180B04.c | 55 ++++++++++++++++- src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c | 35 ++++++++++- src/ov_SC06_022/ov_SC06_022_jr_80184304.c | 12 +++- src/ov_SC06_022/ov_SC06_022_jr_80184A28.c | 14 ++++- src/ov_SC06_024/ov_SC06_024_jr_801867DC.c | 12 +++- src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c | 56 ++++++++++++++++- src/ov_SC06_033/ov_SC06_033_jr_80186574.c | 14 ++++- src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c | 8 ++- src/ov_SC07_009/ov_SC07_009_jr_8017AE2C.c | 24 +++++++- 54 files changed, 1479 insertions(+), 87 deletions(-) diff --git a/src/ov_SC02_005/ov_SC02_005_jr_80181D30.c b/src/ov_SC02_005/ov_SC02_005_jr_80181D30.c index 9684f5c627..4d440a8469 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_80181D30.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_80181D30.c @@ -9380,7 +9380,12 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018BFBC); + + +void func_8018BFBC(s32 a0) { + func_8012AD44((s32 *)a0, 4); +} + extern void func_8012AD44(s32 *a0, s16 a1); void func_8018BFDC(u8 *a0) { diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c b/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c index 892f0324dd..cfb3215d29 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8017C180.c @@ -4666,7 +4666,28 @@ void func_8017F17C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F390); + + +extern s32 func_8012D624(void *a0, s32 a1, s32 a2); +extern u16 D_80126B96; +extern s16 D_80126B9A; + +s32 aF801869C0(s32 param_1) __asm__("func_8017F390"); + +s32 aF801869C0(s32 param_1) { + s32 p; + u16 val; + + if (func_8012D624(param_1, (*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x18) * 3) >> 9, 0x21) == 1) { + p = *(s32 *)(param_1 + 0x20); + val = *(u16 *)(p + 0x12); + D_80126B96 = 0x4002; + D_80126B9A = val; + return 1; + } + return 0; +} + extern void func_8017F440(); @@ -4722,7 +4743,24 @@ void func_8017F47C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8017C180", func_8017F538); + + +void func_8017F538(s32 a0, s32 a1) +{ + typedef struct { s32 w[8]; } Blk32_8017F76C_80186D9C; + extern Blk32_8017F76C_80186D9C D_800AE620; + + Blk32_8017F76C_80186D9C mtx; + s32 vel[3]; + + mtx = D_800AE620; + vel[1] = 0; + vel[0] = 0; + vel[2] = a1; + RotMatrixY(*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12), &mtx); + func_800484EC((s32)&mtx, (s32)&vel[0], a0 + 0x10); +} + extern s32 func_8012BD14(s32 a0); extern void func_8002D59C(s32 a0, u16 a1, s32 a2); diff --git a/src/ov_SC02_028/ov_SC02_028_jr_80184BD8.c b/src/ov_SC02_028/ov_SC02_028_jr_80184BD8.c index 100d3b33fc..515276ccd0 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_80184BD8.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_80184BD8.c @@ -4476,7 +4476,24 @@ void func_80187490(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80184BD8", func_8018754C); + + +void func_8018754C(s32 a0, s32 a1) +{ + typedef struct { s32 w[8]; } Blk32_8017F76C_80186D9C; + extern Blk32_8017F76C_80186D9C D_800AE620; + + Blk32_8017F76C_80186D9C mtx; + s32 vel[3]; + + mtx = D_800AE620; + vel[1] = 0; + vel[0] = 0; + vel[2] = a1; + RotMatrixY(*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12), &mtx); + func_800484EC((s32)&mtx, (s32)&vel[0], a0 + 0x10); +} + extern s32 func_8012BD14(s32 a0); extern void func_8002D59C(s32 a0, u16 a1, s32 a2); diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c b/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c index 1d3503cf2c..0543e16732 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8017AE2C.c @@ -6993,7 +6993,31 @@ void func_80181A44(void) { } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8017AE2C", func_80181AE0); +typedef struct { s32 w[8]; } Copy32; + +extern s16 D_80126CB4; + +s32 func_80181AE0(void *arg0, s32 arg1) { + void *p; + s32 best; + s32 lim; + s32 w; + s32 val; + + best = 0xFFFF; + p = arg0; + while (*(s16 *)((u8 *)p + 6) == 0) { + lim = (s16)arg1; + w = func_80013294(&D_80126CB4, p); + val = w & 0xFFFF; + if (val < lim && (u32)val < (u32)(u16)best) { + best = w; + } + p = (u8 *)p + 8; + } + return best & 0xFFFF; +} + extern void (*D_80188E08[])(void); diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c b/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c index 9af80f3726..79e42d02b9 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8017BEBC.c @@ -5253,7 +5253,26 @@ void func_8018023C(s32 a0) { } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8017BEBC", func_801803A4); + + +extern u8 D_801202A0[]; + +s32 func_801803A4(void) { + s32 count = 0; + s32 i = 0; + u8 *p = D_801202A0; + + do { + if (*(u16 *)p == 0x17F && (*(u16 *)(p + 0x70) & 0xF) == 0) { + count++; + } + i++; + p += 0x10C; + } while (i < 0x60); + + return count < 0xB; +} + extern u8 *func_801290DC(s32 a0, u8 *a1); diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.c b/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.c index 52aaae2414..b79b460f15 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.c @@ -4735,7 +4735,20 @@ u8 *a0; DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017AE2C", func_8017DD7C); + +extern s32 func_8013767C(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 D_8012750C; +extern s32 D_80126B58; +extern s32 D_80126CF0; + +void func_8017DD7C(void) { + s32 v0; + v0 = func_8013767C(D_8012750C); + D_80126CF0 = v0; + func_80171A1C((u8 *)&D_80126B58); +} + DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8017AE2C.c b/src/ov_SC03_023/ov_SC03_023_jr_8017AE2C.c index 33ea1b74c2..9a583b0950 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8017AE2C.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8017AE2C.c @@ -4261,7 +4261,31 @@ void func_8017DA54(void) { } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8017AE2C", func_8017DAD0); + + +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8017DB48(void *a0); + +void func_8017DAD0(void) { + extern s32 D_80126954; + extern s32 D_8012695C; + extern s16 D_80126968; + extern s16 D_8012696A; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + D_80126954 = 0x1F4; + D_8012695C = 0x5dc; + D_80126968 = 0x238; + D_8012696A = 0x800; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = 0; + D_8012697A = 0; + func_8012A018((s32)func_8017DB48, 0); +} + extern void (*D_801829EC[])(void); diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c b/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c index 3956b129fa..f1e22a6ffa 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8017AE2C.c @@ -4740,7 +4740,20 @@ u8 *a0; DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017AE2C", func_8017DD7C); + +extern s32 func_8013767C(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 D_8012750C; +extern s32 D_80126B58; +extern s32 D_80126CF0; + +void func_8017DD7C(void) { + s32 v0; + v0 = func_8013767C(D_8012750C); + D_80126CF0 = v0; + func_80171A1C((u8 *)&D_80126B58); +} + DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c index 0d71f363b3..95162fe25a 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8017FF7C.c @@ -7143,7 +7143,7 @@ extern s32 func_80186DD4(s32 a0); extern void func_80186ECC(s32 a0, s32 a1); extern void func_80186F60(s32 a0); extern s32 func_801870B8(s32 a0); -extern s32 func_80187118(s32 a0, s32 a1); +extern s32 func_80187118(); void func_801860C0(s32 obj) { s32 d; @@ -7823,7 +7823,58 @@ s32 func_801870B8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017FF7C", func_80187118); + typedef struct { s16 vx; u16 vy; s16 vz, pad; } SVec_8017F67C_801869CC; + + +/* match_one's standalone common.h does not reach src/shared/engine_types.h, where the + * real TU's Blk20 { s32 w[8]; } and Vec32 { s32 vx, vy, vz, pad; } live. Local copies here; + * integrator may drop these and reuse the TU's own (engine_types.h:472, :1098). */ +typedef struct { s32 w[8]; } Blk20_80188AF4; +typedef struct { s32 vx, vy, vz, pad; } Vec32_80188AF4; + +s32 func_80187118(s32 a0, s32 a1) +{ + extern s32 func_8012B864(s32 a0); + extern void RotMatrixY(s32 a0, void *a1); + extern void func_800484EC(s32 a0, s32 a1, s32 a2); + extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); + extern struct Mtx32_80184008 D_800AE620; + + u32 pos[3]; + Vec32_80188AF4 out; + u8 rotIn[8]; + u8 rotOut[8]; + Blk20_80188AF4 m; + + m = (*(Blk20_80188AF4 *)&(*(Mtx8_8017DE10_8017E710 *)&D_800AE620)); + RotMatrixY(func_8012B864(a0), &m); + func_800484EC((s32)&m, a1, (s32)&out); + + pos[0] = *(s32 *)(a0 + 0x4) + out.vx; + pos[1] = *(s32 *)(a0 + 0x8) + out.vy; + pos[2] = *(s32 *)(a0 + 0xC) + out.vz; + + { + register u16 rix __asm__("$2"); + register u16 roy __asm__("$3"); + register u16 roz __asm__("$7"); + register u16 riz __asm__("$8"); + + rix = *(u16 *)(a0 + 0x3A); + roy = *((u16 *)&pos[1] + 1); + roz = *((u16 *)&pos[2] + 1); + *(u16 *)(rotIn + 0) = rix; + *(u16 *)(rotIn + 2) = *(u16 *)(a0 + 0x3E); + riz = *(u16 *)(a0 + 0x42); + *(u16 *)(rotOut + 0) = *((u16 *)&pos[0] + 1); + *(u16 *)(rotOut + 2) = roy; + *(u16 *)(rotOut + 4) = roz; + *(u16 *)(rotIn + 4) = riz; + } + + func_8012CEB0((s32)&rotIn[0], (s32)&rotOut[0], 0); +} + s32 func_8018723C(void *a0) { short a[4]; diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c b/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c index 3df1244dfa..daefda2c5d 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8017CA80.c @@ -6330,7 +6330,23 @@ void func_801848AC(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_80184A08); + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012E88C(u8 *a0); + +void func_80184A08(s32 a0) { + s32 u; + + if (func_8012BEE8(a0) != 0) { + *(s16 *)(a0 + 0x2) = 1; + func_8012E88C((u8 *)a0); + u = *(s32 *)(a0 + 0xCC); + if (u != 0) { + *(s16 *)(u + 0xFC) = 0; + } + } +} + void func_80184A58(s32 arg0) { if (*(s32*)(arg0 + 0xCC) != 0) { @@ -6596,7 +6612,7 @@ extern s32 func_8012C588(s32 a0, s32 a1); extern void func_8002D4C8(s32 a0, s32 a1); extern s32 func_8012BEE8(s32 a0); extern void func_8018517C(void *a0); -extern void func_8018545C(void *a0); +extern void func_8018545C(); void func_80184F98(s32 a0) { @@ -6634,7 +6650,7 @@ extern void func_80185144(s32 param_1); extern void func_8012E88C(u8 *a0); extern void func_8018549C(s32 arg0); extern void func_8012B2CC(s32 a0); -extern void func_8018545C(void *a0); +extern void func_8018545C(); void func_80185098(void *a0) { @@ -6816,7 +6832,19 @@ void func_801851A8(s32 param_1) } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8017CA80", func_8018545C); + + +void func_8018545C(s32 a0) { + s32 v1; + + v1 = *(s32 *)(a0 + 0xCC); + if (v1 != 0) { + *(u16 *)(v1 + 0x8) = *(u16 *)(a0 + 0x6); + *(u16 *)(v1 + 0xA) = *(u16 *)(a0 + 0xA) - 0x19; + *(u16 *)(v1 + 0xC) = *(u16 *)(a0 + 0xE); + } +} + void func_8018549C(s32 arg0) { if (arg0 != 0) { diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c b/src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c index 8ec182e942..f3b42005b0 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8017CA80.c @@ -5782,7 +5782,18 @@ void func_80183BF0(s32 a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8017CA80", func_80183C3C); + + +extern void func_8013B598(s32 a0, u16 *a1); + +void func_80183C3C(s32 a0, s32 a1) { + u16 sp[3]; + sp[0] = *(u16 *)(a0 + 0x2); + sp[1] = *(u16 *)(a0 + 0x6); + sp[2] = *(u16 *)(a0 + 0xA); + func_8013B598(a1, sp); +} + extern void func_8013B6A0(s32 idx, u16 *src, s32 val); @@ -6395,7 +6406,21 @@ void func_80184888(s32 out, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8017CA80", func_80184958); + + +extern s32 func_80134510(s32 arg); + +s32 func_80184958(s32 a0) +{ + u16 sp[3]; + s32 result; + sp[0] = *(u16 *)(a0 + 0x6); + sp[1] = *(u16 *)(a0 + 0xA); + sp[2] = *(u16 *)(a0 + 0xE); + result = func_80134510((s32)sp); + return ((u32)result > 0) ? 1 : 0; +} + extern s32 func_8012BD14(s32 a0); @@ -7974,7 +7999,26 @@ void func_80186944(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8017CA80", func_80186AAC); + + +extern u8 D_801202A0[]; + +s32 func_80186AAC(void) { + s32 count = 0; + s32 i = 0; + u8 *p = D_801202A0; + + do { + if (*(u16 *)p == 0x17F && (*(u16 *)(p + 0x70) & 0xF) == 0) { + count++; + } + i++; + p += 0x10C; + } while (i < 0x60); + + return count < 0xB; +} + extern u8 *func_801290DC(s32 a0, u8 *a1); diff --git a/src/ov_SC03_090/ov_SC03_090_jr_80188274.c b/src/ov_SC03_090/ov_SC03_090_jr_80188274.c index 72f93626d1..5d01855565 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_80188274.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_80188274.c @@ -4821,7 +4821,22 @@ s32 func_8018A9C8(void *a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_80188274", func_8018AA88); + + +void func_8018AA88(void) { + + extern u8 D_801202A0[]; + u8 *p; + s32 i; + + p = D_801202A0; + for (i = 0; i < 0x60; i++, p += 0x10C) { + if (*(u16 *)p == 0x1E1) { + *(u16 *)(p + 0x70) |= 0x1000; + } + } +} + extern void func_8002D4C8(s32 a0, s32 a1); diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c b/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c index 648246e350..33dfa70afb 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8018326C.c @@ -3663,7 +3663,16 @@ void func_80184AE4(s32 a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8018326C", func_80184B28); + + +void func_80184B28(s32 a0, s32 a1, s32 a2) { + u16 sp[3]; + sp[0] = *(u16 *)(a0 + 0x2); + sp[1] = *(u16 *)(a0 + 0x6); + sp[2] = *(u16 *)(a0 + 0xA); + func_8013B6A0(a1, sp, a2); +} + void func_80184B6C(void) { } @@ -4166,7 +4175,23 @@ void func_80185430(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8018326C", func_8018558C); + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012E88C(u8 *a0); + +void func_8018558C(s32 a0) { + s32 u; + + if (func_8012BEE8(a0) != 0) { + *(s16 *)(a0 + 0x2) = 1; + func_8012E88C((u8 *)a0); + u = *(s32 *)(a0 + 0xCC); + if (u != 0) { + *(s16 *)(u + 0xFC) = 0; + } + } +} + void func_801855DC(s32 arg0) { s32 ptr = *(s32*)(arg0 + 0xCC); @@ -5865,7 +5890,26 @@ void func_801877EC(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8018326C", func_80187954); + + +extern u8 D_801202A0[]; + +s32 func_80187954(void) { + s32 count = 0; + s32 i = 0; + u8 *p = D_801202A0; + + do { + if (*(u16 *)p == 0x17F && (*(u16 *)(p + 0x70) & 0xF) == 0) { + count++; + } + i++; + p += 0x10C; + } while (i < 0x60); + + return count < 0xB; +} + extern u8 *func_801290DC(s32 a0, u8 *a1); diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8017D898.c b/src/ov_SC03_093/ov_SC03_093_jr_8017D898.c index 22ce5b0f20..2765fed3dc 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8017D898.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8017D898.c @@ -3894,7 +3894,22 @@ void func_8017F72C(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8017D898", func_8017F768); + + +extern void func_80016224(s32 a0, s32 a1); + +void func_8017F768(void *a0) { + s16 t; + if (*(s16 *)((s32)a0 + 0xFE) != 0) { + func_80016224(*(s16 *)((s32)a0 + 0xFE) & 0xFF, 4); + *(s16 *)((s32)a0 + 0x2A) = -2; + t = 0x80 - *(s16 *)((s32)a0 + 0xFE) * 3; + *(s16 *)((s32)a0 + 0x28) = t; + *(s16 *)((s32)a0 + 0x26) = t; + *(s16 *)((s32)a0 + 0x24) = t; + } +} + extern u8 D_801202A0[]; diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c b/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c index 58093ecb96..6cae767360 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8017BEBC.c @@ -3867,7 +3867,22 @@ void func_8017DCF4(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8017BEBC", func_8017DD30); + + +extern void func_80016224(s32 a0, s32 a1); + +void func_8017DD30(void *a0) { + s16 t; + if (*(s16 *)((s32)a0 + 0xFE) != 0) { + func_80016224(*(s16 *)((s32)a0 + 0xFE) & 0xFF, 4); + *(s16 *)((s32)a0 + 0x2A) = -2; + t = 0x80 - *(s16 *)((s32)a0 + 0xFE) * 3; + *(s16 *)((s32)a0 + 0x28) = t; + *(s16 *)((s32)a0 + 0x26) = t; + *(s16 *)((s32)a0 + 0x24) = t; + } +} + extern u8 D_801202A0[]; diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c b/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c index 9508df5ffb..f578276914 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8017BEBC.c @@ -4325,7 +4325,27 @@ void func_8017ECD4(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017EDAC); + + +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); + +void func_8017EDAC(a0, a1, a2) +void *a0; +void *a1; +s32 a2; +{ + s32 i; + + for (i = 0; *(s16 *)((s32)a1 + i) != 0; i += 6) { + s32 v1 = func_8012C658(0x167, (s16)a2, (s32)a0); + if (v1 != 0) { + *(u16 *)(v1 + 0x6) = *(u16 *)((s32)a1 + i + 0); + *(u16 *)(v1 + 0xA) = *(u16 *)((s32)a1 + i + 2); + *(u16 *)(v1 + 0xE) = *(u16 *)((s32)a1 + i + 4); + } + } +} + extern void func_8012AD44(s32 *a0, s16 a1); void func_8017EE48(s32 a0) { @@ -4575,7 +4595,27 @@ void func_8017F2A4(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017F308); + + +extern u8 D_801202A0[]; + +void func_8017F308(s32 param_1) { + u8 *ptr = D_801202A0; + u8 *end = ptr + 0x6480; + + if (ptr < end) { + s32 want = param_1 & 0xFFFF; + s32 mask = 0x7FFFFFFF; + u8 *lim = end; + do { + if (*(u16 *)ptr == want) { + (*(s32 **)(ptr + 0x20))[1] &= mask; + } + ptr += 0x10C; + } while (ptr < lim); + } +} + extern void (*D_80192A64[])(void); @@ -4588,7 +4628,7 @@ void func_8017F370(void *a0) { extern s32 D_80192A34[]; extern s32 D_80192A04[]; extern void (*D_80192A18[])(void); -extern void func_8017EDAC(s32, void *, s32); +extern void func_8017EDAC(); extern s32 D_8019A7D0; void func_8017F3AC(s32 a0) { diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c index 78d167d8dd..dfeee791ce 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8017D898.c @@ -4439,7 +4439,13 @@ extern void func_80178B18(s32 a0, s32 a1); } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_80180294); + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_80180294(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x6); + } + // @class: struct @@ -4497,7 +4503,21 @@ void func_801803B8(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_801803FC); + +extern void func_801330E0(void *, s16 *, s32); + +s32 func_801803FC(s32 a0) { + s32 v1; + + v1 = *(s32 *)(a0 + 0xCC); + if (v1 != 0) { + *(u16 *)(v1 + 0x8) = *(u16 *)(a0 + 0x6); + *(u16 *)(v1 + 0xA) = *(u16 *)(a0 + 0xA); + *(u16 *)(v1 + 0xC) = *(u16 *)(a0 + 0xE); + func_801330E0((void *)(v1 + 0x8), (s16 *)(v1 + 0x8), -0x100); + } +} + typedef struct { u16 x, y, z; diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8017D898.c b/src/ov_SC03_100/ov_SC03_100_jr_8017D898.c index 8402765c66..e25220b6d5 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8017D898.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8017D898.c @@ -4651,7 +4651,23 @@ void func_80180D18(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8017D898", func_80180E18); + + +extern s32 *D_80126B78; + +void func_80180E18(s32 a0) { + s16 t; + + *(u16 *)(*(u32 *)(a0 + 0x20) + 0x10) += *(u16 *)(a0 + 0xFE); + *(u16 *)(*(u32 *)(a0 + 0x20) + 0x12) += *(u16 *)(a0 + 0x100); + *(u16 *)(*(u32 *)(a0 + 0x20) + 0x14) += *(u16 *)(a0 + 0x102); + + t = *(s16 *)(a0 + 0x100); + if (t != 0 && *(u8 *)(a0 + 0x74) != 0) { + *(u16 *)((s32)D_80126B78 + 0x12) += t; + } +} + extern s32 func_8004787C(s32 a0); diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c b/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c index d78cb1ab54..7981e7c78e 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c @@ -5082,7 +5082,13 @@ void func_801807B8(void *arg0) { } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8017CA80", func_801807F4); + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_801807F4(void *arg0) { + ((void (*)(void *, int))func_8012AD44)(arg0, 0x6); + } + // @class: struct @@ -5581,7 +5587,22 @@ s32 func_801812B4(void *arg0, s32 arg1) { } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8017CA80", func_80181374); + + +void func_80181374(void) { + + extern u8 D_801202A0[]; + u8 *p; + s32 i; + + p = D_801202A0; + for (i = 0; i < 0x60; i++, p += 0x10C) { + if (*(u16 *)p == 0x1E1) { + *(u16 *)(p + 0x70) |= 0x1000; + } + } +} + extern void func_8002D4C8(s32 a0, s32 a1); diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c b/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c index 7146fd2034..db6e1d1730 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8017CA80.c @@ -4501,7 +4501,18 @@ void func_80181A84(s32 a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181AD0); + + +extern void func_8013B598(s32 a0, u16 *a1); + +void func_80181AD0(s32 a0, s32 a1) { + u16 sp[3]; + sp[0] = *(u16 *)(a0 + 0x2); + sp[1] = *(u16 *)(a0 + 0x6); + sp[2] = *(u16 *)(a0 + 0xA); + func_8013B598(a1, sp); +} + extern void func_8013B6A0(s32 idx, u16 *src, s32 val); @@ -4563,7 +4574,27 @@ void func_80181BDC(void *arg0) } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181CA8); + + +void func_80181CA8(s32 arg0) +{ + extern s32 rand(void); + extern void func_8012B200(u8 *a0); + + register s32 rec __asm__("$17"); + s32 r; + s32 n; + + rec = arg0; + r = rand(); + *(u16 *)(rec + 0x104) = *(u16 *)(rec + 0xFC); + func_8012B200((u8 *)rec); + n = rand(); + *(s32 *)(rec + 0x1C) = n % 60 + 0x78; + *(s16 *)(rec + 0xFE) = (s16)r % 32 + 0xA; + *(s16 *)(rec + 0x2) = 2; +} + typedef struct { s16 a, b, c; } SV3x_80184B30_80181D58; typedef struct { short m[3][3]; long t[3]; } MTX_801851A8_801839C4_80181D58; @@ -4648,7 +4679,19 @@ void func_80181D58(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8017CA80", func_80181EA0); + + +extern void func_8012CBF4(s32 a0); +extern s32 func_80013478(s32 a0, s32 a1); + +void func_80181EA0(s32 arg0) { + func_8012CBF4(arg0); + if (func_80013478(arg0 + 4, arg0 + 0x88) < 0x101) { + *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x10) = 0; + *(s16 *)(arg0 + 2) = 4; + } +} + diff --git a/src/ov_SC03_104/ov_SC03_104_jr_80182038.c b/src/ov_SC03_104/ov_SC03_104_jr_80182038.c index 434cffe6b4..e03f40f12c 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_80182038.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_80182038.c @@ -3125,7 +3125,21 @@ void func_8018271C(s32 out, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_80182038", func_801827EC); + + +extern s32 func_80134510(s32 arg); + +s32 func_801827EC(s32 a0) +{ + u16 sp[3]; + s32 result; + sp[0] = *(u16 *)(a0 + 0x6); + sp[1] = *(u16 *)(a0 + 0xA); + sp[2] = *(u16 *)(a0 + 0xE); + result = func_80134510((s32)sp); + return ((u32)result > 0) ? 1 : 0; +} + extern s32 func_8012BD14(s32 a0); diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c b/src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c index 364d98cb04..2276b05787 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8017BEBC.c @@ -4981,4 +4981,45 @@ end: } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017BEBC", func_8017F788); +typedef struct { + u8 r; /* 0x00 */ + u8 g; /* 0x01 */ + u8 b; /* 0x02 */ + u8 cd; /* 0x03 (never written; the block move copies it anyway) */ +} Col4_80181574; + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); +extern s32 func_8012B77C(s32 out, s32 from, s32 to); + +void func_8017F788(s32 a0) { + s16 sp10[8]; /* 0x10 */ + s32 sp20[2]; /* 0x20 */ + s16 t; + s32 r; + + sp10[1] = D_80126B5E; + t = D_80126B62; + sp10[3] = t - 0x30; + sp10[5] = D_80126B66; + + func_8012B77C((s32)sp20, a0 + 4, (s32)sp10); + + r = sp20[0]; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = r; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = r >> 16; + func_8012B2CC(a0); + + func_8012B200((u8 *)a0); + func_8012B178(a0, 0xFFF00000); + + *(u16 *)(a0 + 2) = 5; + *(u16 *)(a0 + 0x34) = 0; + *(s32 *)(a0 + 0x1C) = 0; + *(u16 *)(a0 + 0xFE) = D_80126B62 - 96; +} + diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8017F83C.c b/src/ov_SC03_108/ov_SC03_108_jr_8017F83C.c index 54d2d7dc17..2c7cbdbd9b 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8017F83C.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8017F83C.c @@ -2946,7 +2946,24 @@ void func_8017FC3C(s32 param_1) } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017F83C", func_8017FD08); + + + +extern void func_8012BE54(s32 a0); +extern void func_8012B21C(void *a0); +extern void func_8012E88C(s32 a0); +extern void func_80143994(s32 *a0, s32 a1); + +void func_8017FD08(void *arg0) { + if (((s32 (*)(s32))func_8012BE54)((s32)arg0) <= 0x40000) { + *(s16 *)((char *)arg0 + 0x2) = 9; + func_8012B21C(arg0); + func_8012E88C((s32)arg0); + *(s32 *)((char *)arg0 + 0xCC) = + ((s32 (*)(s32 *, s32))func_80143994)(arg0, 0x1000); + } +} + INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017F83C", func_8017FD64); diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c b/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c index d5549c1e34..6ecb37a761 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8017D898.c @@ -4047,4 +4047,45 @@ end: } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017FB14); +typedef struct { + u8 r; /* 0x00 */ + u8 g; /* 0x01 */ + u8 b; /* 0x02 */ + u8 cd; /* 0x03 (never written; the block move copies it anyway) */ +} Col4_80181574; + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); +extern s32 func_8012B77C(s32 out, s32 from, s32 to); + +void func_8017FB14(s32 a0) { + s16 sp10[8]; /* 0x10 */ + s32 sp20[2]; /* 0x20 */ + s16 t; + s32 r; + + sp10[1] = D_80126B5E; + t = D_80126B62; + sp10[3] = t - 0x30; + sp10[5] = D_80126B66; + + func_8012B77C((s32)sp20, a0 + 4, (s32)sp10); + + r = sp20[0]; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = r; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = r >> 16; + func_8012B2CC(a0); + + func_8012B200((u8 *)a0); + func_8012B178(a0, 0xFFF00000); + + *(u16 *)(a0 + 2) = 5; + *(u16 *)(a0 + 0x34) = 0; + *(s32 *)(a0 + 0x1C) = 0; + *(u16 *)(a0 + 0xFE) = D_80126B62 - 96; +} + diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c b/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c index 514255d51f..92046e9495 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8017FBC8.c @@ -2958,7 +2958,7 @@ extern s32 D_8019BFAC; extern void func_80180D2C(); extern void func_8002D4C8(s32 a0, s32 a1); extern void func_8012A828(s32*, s32); -extern void func_80180AF0(void); +extern void func_80180AF0(); void func_8018066C(s32 *a0) { ((void (*)(s32 *))func_80180AF0)(a0); @@ -2968,7 +2968,7 @@ void func_8018066C(s32 *a0) { } -extern void func_80180AF0(void); +extern void func_80180AF0(); extern void func_80180D2C(); void func_801806B8(s32 a0) { func_80180AF0(); @@ -2982,7 +2982,7 @@ extern s32 D_8019C114; extern s32 D_8019BFAC; extern void func_8012A828(s32 *a0, s32 a1); extern void func_80180D2C(); -extern void func_80180AF0(void); +extern void func_80180AF0(); void func_801806E8(s32 param_1) { *(u8 *)(param_1 + 0xC2) = 0; @@ -3160,7 +3160,25 @@ LAB_80180740: } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180AF0); + + +void func_80180AF0(s32 *a0) +{ + extern void func_8012B2CC(s32 a0); + extern void func_8012B23C(s32 a0); + + s32 ptr; + + *(u16 *)((s32)a0 + 0x5C) = *(u16 *)((s32)a0 + 0x5C) & 0xFFFE; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = (*(u16 *)((s32)a0 + 0x62) + 0x800) & 0xFFF; + ptr = *(s32 *)((s32)a0 + 0x20); + *(u16 *)(ptr + 0x14) = 0; + *(u16 *)(ptr + 0x10) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0; + func_8012B2CC((s32)a0); + func_8012B23C((s32)a0); +} + extern void func_8012A828(s32 *a0, s32 a1); extern s32 func_8012B030(u8 *a0); diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c b/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c index 399f623c05..4f287f76f2 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8017C294.c @@ -6330,4 +6330,45 @@ end: } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_8018172C); +typedef struct { + u8 r; /* 0x00 */ + u8 g; /* 0x01 */ + u8 b; /* 0x02 */ + u8 cd; /* 0x03 (never written; the block move copies it anyway) */ +} Col4_80181574; + +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8012B2CC(s32 a0); +extern void func_8012B200(u8 *a0); +extern void func_8012B178(s32 a0, s32 a1); +extern s32 func_8012B77C(s32 out, s32 from, s32 to); + +void func_8018172C(s32 a0) { + s16 sp10[8]; /* 0x10 */ + s32 sp20[2]; /* 0x20 */ + s16 t; + s32 r; + + sp10[1] = D_80126B5E; + t = D_80126B62; + sp10[3] = t - 0x30; + sp10[5] = D_80126B66; + + func_8012B77C((s32)sp20, a0 + 4, (s32)sp10); + + r = sp20[0]; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = r; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = r >> 16; + func_8012B2CC(a0); + + func_8012B200((u8 *)a0); + func_8012B178(a0, 0xFFF00000); + + *(u16 *)(a0 + 2) = 5; + *(u16 *)(a0 + 0x34) = 0; + *(s32 *)(a0 + 0x1C) = 0; + *(u16 *)(a0 + 0xFE) = D_80126B62 - 96; +} + diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8017BEBC.c b/src/ov_SC03_114/ov_SC03_114_jr_8017BEBC.c index 964b9ed0a2..cee07a3346 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8017BEBC.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8017BEBC.c @@ -3543,7 +3543,27 @@ void func_8017D704(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8017BEBC", func_8017D740); + + +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8012A828(s32, void*); + +void func_8017D740(void *arg0) { + s16 hval; + s32 temp; + + hval = *(s16 *)((char *)arg0 + 0x10A); + if (hval & 0x8000) { + *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x12) = + func_80012ABC(*(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x12), hval & 0xFFF, 4); + } + temp = *(s32 *)((char *)arg0 + 0xF8); + if (temp != 0 && *(s32 *)((char *)arg0 + 0x90) != temp) { + ((void (*)(s32, s32))func_8012A828)((s32)arg0, temp); + *(s32 *)((char *)arg0 + 0xF8) = 0; + } +} + extern s32 D_80182BD0; @@ -3646,7 +3666,7 @@ void func_8017DA28(void) { extern void func_8012A828(s32 a0, void *a1); extern void func_800183E0(s32 a0); extern s32 rand(void); -extern void func_8017D740(s32 a0); +extern void func_8017D740(); extern void (*D_80182908[])(s32); extern s32 D_80182A60; extern s32 D_80182BD0; @@ -3697,7 +3717,7 @@ e58_chk: extern void func_8012A828(s32 a0, void *a1); -extern void func_8017D740(s32 a0); +extern void func_8017D740(); extern void (*D_80182F88[])(void); extern void (*D_80183050[])(void); extern u8 D_801A5EFC[]; diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c b/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c index 28d3c146c5..c270dd6d73 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8017BEBC.c @@ -3696,7 +3696,7 @@ s32 func_8017DA34(void) { extern s32 func_8012C044(s32 a0); extern u32 D_8018AB80[]; -extern void func_8017EFB8(s32 a0); +extern void func_8017EFB8(); void func_8017DA3C(s32 a0) { s32 *s0 = (s32 *)a0; @@ -4348,7 +4348,7 @@ void func_8017E71C(s32 param_1) { extern s32 func_8012BEE8(s32 a0); extern u16 D_800B99DA; extern void func_80130D48(s32 a0); -extern void func_8017EFB8(s32); +extern void func_8017EFB8(); void func_8017E778(s32 a0) { s32 v0; @@ -4426,7 +4426,7 @@ void func_8017E800(s32 param_1) { extern s32 func_8012BEE8(s32 a0); extern u16 D_800B99DA; extern void func_80130D48(s32 a0); -extern void func_8017EFB8(s32); +extern void func_8017EFB8(); void func_8017E8D0(s32 a0) { @@ -4460,7 +4460,45 @@ void func_8017E8D0(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8017BEBC", func_8017E998); + +typedef struct { s16 vx, vy, vz, pad; } SVEC2_C974_8017BA3C; +typedef struct { + SVECTOR v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8_8016B6BC; + + +extern void func_80143BDC(u16*); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8012B0B4(u32 *a0, s32 a1, s32 a2); + +void func_8017E998(s32 arg0) { + s32 i; + s32 q; + u16 sp10[3]; + u32 buf[2]; + s32 v; + u32 *bp; + + if (*(s16 *)(arg0 + 0xAA) <= 0) { + for (i = 0; i < 20; i++) { + bp = buf; + func_8012B0B4(bp, rand() % 4096, 64); + v = *(s32 *)buf; + sp10[0] = *(u16 *)(arg0 + 0x6) + v; + sp10[1] = *(u16 *)(arg0 + 0xA) - 0x60; + sp10[2] = *(u16 *)(arg0 + 0xE) + (v >> 16); + q = ((s32 (*)(u16 *))func_80143BDC)(sp10); + if (q != 0) { + *(u8 *)(*(s32 *)(q + 0xCC) + 0x27) = 0x5B; + } + } + func_8002D4C8(0x521, 0); + } +} + extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); extern char D_8018ABB0; @@ -4568,7 +4606,7 @@ extern void func_8012ADE4(u8 *a0); extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); extern void func_8012CBA4(s32 a0); extern void func_80131E00(struct S80131E00 *a0, s32 a1); -extern void func_8017EFB8(s32); +extern void func_8017EFB8(); s32 func_8017EC80(s32 arg0) { @@ -4677,7 +4715,30 @@ s32 func_8017EE7C(s32 a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8017BEBC", func_8017EFB8); + +extern void func_8002A04C(s32 a0); +extern void func_8002AC00(s32 arg0); +extern void func_8012C218(void *a0); + +void func_8017EFB8(void *a0) +{ + s32 v1; + + if (*(short *)((char *)a0 + 0x102) == 0) { + func_8002A04C((s32)a0); + func_8002AC00(0x1A); + } + + if (!((*(short *)((char *)a0 + 0x70) & 0x8000))) { + v1 = *(s32 *)((char *)a0 + 0x68); + if (v1 != 0 && ((*(short *)((char *)a0 + 0x72) & 0x8000))) { + *(unsigned short *)(v1 + 0xA) = *(unsigned short *)(v1 + 0xA) & 0x7FFF; + } + } + + func_8012C218(a0); +} + extern void func_8017FD20(void *a0); diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8017AE2C.c b/src/ov_SC03_118/ov_SC03_118_jr_8017AE2C.c index 5a47d7cbc0..b684ce4967 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8017AE2C.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8017AE2C.c @@ -4700,7 +4700,20 @@ u8 *a0; DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8017AE2C", func_8017DD7C); + +extern s32 func_8013767C(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 D_8012750C; +extern s32 D_80126B58; +extern s32 D_80126CF0; + +void func_8017DD7C(void) { + s32 v0; + v0 = func_8013767C(D_8012750C); + D_80126CF0 = v0; + func_80171A1C((u8 *)&D_80126B58); +} + DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c b/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c index a8d5528b91..3b5948f873 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8017AE2C.c @@ -4690,7 +4690,20 @@ u8 *a0; DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8017AE2C", func_8017DD7C); + +extern s32 func_8013767C(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 D_8012750C; +extern s32 D_80126B58; +extern s32 D_80126CF0; + +void func_8017DD7C(void) { + s32 v0; + v0 = func_8013767C(D_8012750C); + D_80126CF0 = v0; + func_80171A1C((u8 *)&D_80126B58); +} + DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_jr_80181B44.c b/src/ov_SC03_124/ov_SC03_124_jr_80181B44.c index 20231bf77b..5e33922877 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_80181B44.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_80181B44.c @@ -4128,7 +4128,15 @@ extern void func_8012B414(int a0); } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80181B44", func_801836B8); + + +void func_801836B8(s32 arg0) +{ + extern u16 D_800B99DA; + extern s32 func_8004787C(s32 a0); + *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x10) = (u32)func_8004787C(D_800B99DA * 48) >> 5; +} + extern s32 func_80029504(void); extern void func_8012C1B8(void); diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c b/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c index 2d45f72a2c..3fa2296cab 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c @@ -4311,7 +4311,42 @@ void func_80180148(void *a0, void *a1, void *a2, void *a3) } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8017D604", func_80180230); + + +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 rand(void); + +void func_80180230(void *a0, void *a1, s16 a2, s16 a3) +{ + extern u8 *func_8012913C(s32 a0); + s16 i; + s16 rot[4]; + s32 mtx[8]; + u8 *ent; + + i = 0; + if (0 < a3) { + do { + ent = func_8012913C(0x46); + if (ent != 0) { + rot[0] = (rand() & 0x7F) * 8 + 0xF00; + rot[1] = a2 + (s16)((rand() & 0x7F00) >> 5); + rot[2] = 0; + RotMatrixYXZ(rot, mtx); + ApplyMatrixSV(mtx, a1, rot); + *(s16 *)(ent + 6) = *(s16 *)a0 + rot[0]; + *(s16 *)(ent + 10) = *(s16 *)((s8 *)a0 + 2) + rot[1]; + *(s16 *)(ent + 14) = *(s16 *)((s8 *)a0 + 4) + rot[2]; + *(s32 *)(ent + 0x10) = (s32)rot[0] << 12; + *(s32 *)(ent + 0x14) = (s32)rot[1] << 12; + *(s32 *)(ent + 0x18) = (s32)rot[2] << 12; + } + i = i + 1; + } while (i < a3); + } +} + extern void (*D_80188138[])(void); diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c b/src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c index 07c6cd962b..c016db9e03 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c @@ -5024,7 +5024,7 @@ void func_8017F4BC(void *a0) { void func_8017F4F8(s32 a0) { extern void (*D_8018B8D4)(void); extern u8 D_80187E20[]; - extern void func_8017F5E0(void); + extern void func_8017F5E0(); s32 s0 = a0; if (func_8012C354(a0, (s32)&D_8018B8D4)) { *(u8 *)(s0 + 0xC0) = 1; @@ -5060,7 +5060,26 @@ void func_8017F5A0(s32 a0) { } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_8017F5E0); + +extern void func_8012BD14(s32); +extern s32 func_8016F1AC(void); +extern s32 func_80178BF8(); +extern void func_80172710(void); + +s32 func_8017D698_x(s32 a0) __asm__("func_8017F5E0"); + +s32 func_8017D698_x(s32 a0) { + if (((s32 (*)(s32))func_8012BD14)(*(s32 *)(a0 + 0x64)) >= 0x1001) { + return 0; + } + if (func_8016F1AC() != 0) { + return 0; + } + *(s16 *)(*(s32 *)(a0 + 0x64) + 2) = 2; + func_80178BF8(); + return (s32)func_80172710; +} + extern s32 D_801274D8; extern s32 D_801274DC; diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c b/src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c index e47e6b1ca3..2ba1b0f43d 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c @@ -4743,7 +4743,7 @@ extern s32 func_8012C354(s32 a0, s32 a1); extern void func_8012A828(s32, s32); extern s32 func_801788B8(s32 arg0, s32 arg1); -extern void func_8017F01C(void); +extern void func_8017F01C(); void func_8017EF38(s32 a0) { @@ -4783,7 +4783,26 @@ void func_8017EFDC(s32 a0) { } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8017BEBC", func_8017F01C); + +extern void func_8012BD14(s32); +extern s32 func_8016F1AC(void); +extern s32 func_80178BF8(); +extern void func_80172710(void); + +s32 func_8017D698_x(s32 a0) __asm__("func_8017F01C"); + +s32 func_8017D698_x(s32 a0) { + if (((s32 (*)(s32))func_8012BD14)(*(s32 *)(a0 + 0x64)) >= 0x1001) { + return 0; + } + if (func_8016F1AC() != 0) { + return 0; + } + *(s16 *)(*(s32 *)(a0 + 0x64) + 2) = 2; + func_80178BF8(); + return (s32)func_80172710; +} + extern s16 D_80126CAC; extern s32 D_801274D8; diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8017BEBC.c b/src/ov_SC04_010/ov_SC04_010_jr_8017BEBC.c index 6392054235..0e4b5874aa 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8017BEBC.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8017BEBC.c @@ -3561,7 +3561,13 @@ s32 func_8017D5DC(void* param_1) } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8017BEBC", func_8017D6C4); + + +s32 func_8017D6C4(void *a0) +{ + *(s16 *)((s32)a0 + 0xFE) = 0; + } + INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8017BEBC", func_8017D6CC); @@ -3653,7 +3659,7 @@ extern s32 func_80029504(void); extern void func_8012CAE4(void *a0); extern s32 func_8012C354(s32 a0, s32 a1); extern s32 func_8017D5DC(void *a0); -extern s32 func_8017D6C4(s32 a0); +extern s32 func_8017D6C4(); extern s32 func_8012AD50(void *a0); extern u8 D_80181CBC[]; diff --git a/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c index 04bd5cf2c1..1aa6eb3eeb 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_80188E1C.c @@ -4649,7 +4649,33 @@ void func_8018B19C(u8 *arg0) } -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B2B8); + + +extern void func_8012AD80(s32 a0); +extern s32 func_80128ED8(s32 a0, s32 *a1); +extern s32 func_8012BEE8(s32 a0); +extern void func_80016714(void *a0, s32 a1); +extern void func_8012C218(void *a0); + +void func_8018B2B8(void *arg0) { + s32 temp_s1; + s32 temp_v1; + + temp_s1 = *(s32 *)((s32)arg0 + 0xCC); + func_8012AD80((s32)arg0); + temp_v1 = *(s32 *)((s32)arg0 + 0xCC); + *(u16 *)(temp_v1 + 8) = *(u16 *)((s32)arg0 + 6); + *(u16 *)(temp_v1 + 0xA) = *(u16 *)((s32)arg0 + 0xA); + *(u16 *)(temp_v1 + 0xC) = *(u16 *)((s32)arg0 + 0xE); + if ((*(s32 *)((s32)arg0 + 0x1C) & 7) == 0) { + func_80128ED8(temp_s1, (s32 *)((s32)arg0 + 0xD0)); + } + if (func_8012BEE8((s32)arg0) != 0) { + func_80016714((void *)temp_s1, 0x38); + func_8012C218(arg0); + } +} + extern void func_8012B414(int a0); @@ -4662,7 +4688,20 @@ extern void func_8012B414(int a0); DEFINE_func_8018B388() /* dedup: shared engine-core @0x8018B388 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B400); + + +extern u16 D_800B99DA; +extern s32 func_8004787C(s32); + +void func_8018B400(void *arg0) { + u32 ret; + u8 *v1; + + ret = func_8004787C(D_800B99DA * 48); + v1 = *(u8 **)((char *)arg0 + 0x20); + *(u16 *)(v1 + 0x10) = ret >> 5; +} + extern s32 D_801B60B0[]; extern s32 D_801E053C[]; diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c b/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c index 2aaf3db4f6..da93ae12fe 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c @@ -3880,7 +3880,42 @@ void func_8017F9EC(void *a0, void *a1, void *a2, void *a3) } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8017D604", func_8017FAD4); + + +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern void RotMatrixYXZ(void *a0, void *a1); +extern s32 rand(void); + +void func_8017FAD4(void *a0, void *a1, s16 a2, s16 a3) +{ + extern u8 *func_8012913C(s32 a0); + s16 i; + s16 rot[4]; + s32 mtx[8]; + u8 *ent; + + i = 0; + if (0 < a3) { + do { + ent = func_8012913C(0x46); + if (ent != 0) { + rot[0] = (rand() & 0x7F) * 8 + 0xF00; + rot[1] = a2 + (s16)((rand() & 0x7F00) >> 5); + rot[2] = 0; + RotMatrixYXZ(rot, mtx); + ApplyMatrixSV(mtx, a1, rot); + *(s16 *)(ent + 6) = *(s16 *)a0 + rot[0]; + *(s16 *)(ent + 10) = *(s16 *)((s8 *)a0 + 2) + rot[1]; + *(s16 *)(ent + 14) = *(s16 *)((s8 *)a0 + 4) + rot[2]; + *(s32 *)(ent + 0x10) = (s32)rot[0] << 12; + *(s32 *)(ent + 0x14) = (s32)rot[1] << 12; + *(s32 *)(ent + 0x18) = (s32)rot[2] << 12; + } + i = i + 1; + } while (i < a3); + } +} + extern void (*D_801874C4[])(void); diff --git a/src/ov_SC05_001/ov_SC05_001_jr_80183508.c b/src/ov_SC05_001/ov_SC05_001_jr_80183508.c index 327f79152e..ba7c523678 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_80183508.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_80183508.c @@ -3127,7 +3127,34 @@ extern void func_80184430(s32 *a0); } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80183508", func_80184028); + + +void func_80184028(s32 param_1) +{ + extern void func_80184430(s32 *a0); + extern void func_8012B14C(s32 a0, s32 a1); + extern void func_8012A828(s32*, s32); + extern s32 func_8018466C(); + extern s32 D_801AE350; + extern s32 D_801AE4A8; + extern s32 D_801AE4B8; + + s32 s0 = param_1; + + *(u8 *)(s0 + 0xC2) = 0; + *(u8 *)(s0 + 0xC3) = 0; + func_80184430((s32 *)param_1); + + if (*(u16 *)(s0 + 0x5E) == 9 || *(u16 *)(s0 + 0x5E) == 0x1C) { + func_8012B14C(s0, (s32)&D_801AE4A8); + } else { + func_8012B14C(s0, (s32)&D_801AE4B8); + } + + ((void (*)(s32, void *))func_8012A828)(s0, (void *)&D_801AE350); + func_8018466C(s0); +} + void func_801840AC(s32 param_1) { @@ -3289,7 +3316,25 @@ LAB_80180740: } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_80183508", func_80184430); + + +void func_80184430(s32 *a0) +{ + extern void func_8012B2CC(s32 a0); + extern void func_8012B23C(s32 a0); + + s32 ptr; + + *(u16 *)((s32)a0 + 0x5C) = *(u16 *)((s32)a0 + 0x5C) & 0xFFFE; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = (*(u16 *)((s32)a0 + 0x62) + 0x800) & 0xFFF; + ptr = *(s32 *)((s32)a0 + 0x20); + *(u16 *)(ptr + 0x14) = 0; + *(u16 *)(ptr + 0x10) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0; + func_8012B2CC((s32)a0); + func_8012B23C((s32)a0); +} + extern void func_8012A828(s32*, s32); extern s32 func_8012B030(u8 *a0); diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8017BEBC.c b/src/ov_SC05_004/ov_SC05_004_jr_8017BEBC.c index 5eafd50fa2..5c1acfb74d 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8017BEBC.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8017BEBC.c @@ -4784,4 +4784,25 @@ void func_8017F0B8(void *arg0) { } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017BEBC", func_8017F188); + + +extern void func_8012DFD4(u8 *a0); + +void func_8017F188(s32 param_1) { + extern s32 *D_80126B78; + s32 a0; + s32 v1; + + if (*(s16 *)(param_1 + 0xFE) == 0) { + a0 = *(s32 *)(param_1 + 0x20); + v1 = *(s32 *)(param_1 + 0x64); + *(u16 *)(a0 + 0x12) = *(u16 *)(a0 + 0x12) + *(u16 *)(v1 + 0xFC); + func_8012DFD4((u8 *)param_1); + if (*(u8 *)(param_1 + 0x74) != 0) { + a0 = (s32)D_80126B78; + v1 = *(s32 *)(param_1 + 0x64); + *(u16 *)(a0 + 0x12) = *(u16 *)(a0 + 0x12) + *(u16 *)(v1 + 0xFC); + } + } +} + diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8017BEBC.c b/src/ov_SC05_006/ov_SC05_006_jr_8017BEBC.c index 7927e86a1d..113cbd31b4 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8017BEBC.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8017BEBC.c @@ -4873,7 +4873,71 @@ void func_8017F130(void *a0) { } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8017BEBC", func_8017F16C); +typedef struct { u8 b[0x6C]; } Blk6C_80184CB0; + +/* §193-A banked twin: ov_SC06_018:func_8018AF88 (sim 0.708) establishes the + * `local = D_800AE620;` whole-struct-copy idiom for this exact symbol, with + * the address cached in a pointer local (forced into $s1, callee-saved, + * live across the RotMatrixY + follow-up calls). Same-TU sibling + * func_80185730 (src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c ~L5479) is an + * even closer structural relative: `m = D_800AE620;` on an 8-word Mat32_* + * typedef (§48 struct-assign -> 3+3+2 lw/sw grouping), RotMatrixY's angle + * arg read as `*(s16*)(*(s32*)((s32)a0 + 0x20) + 0x12)` mirrors this + * target's own `lw v0,0x20($s0); lh a0,0x12($v0)` chain almost verbatim + * (that sibling has one extra outer +0x64 hop this target does not). + * RotTransSV / func_8004914C / func_800491AC already carry file-scope + * `void *` decls in the destination TU (~L2639-2641) -- reused verbatim. + * SV4 {s16 a,b,c,d;} (src/shared/engine_types.h:598) is already used + * alongside RotTransSV/D_801C112C in the same TU and is the exact 8-byte + * shape both local vectors need (frame math: 16B implicit arg-spill + + * 32B Mat32 m + 8B sv + 8B out = 64B locals, + 12B saves + 4B pad = 0x50, + * matching the target's `addiu $sp,$sp,-0x50` exactly -- no 12-byte VECTOR + * fits, ruling that guess out). + */ + +typedef struct { s32 w[8]; } Mat32_80186C20; +typedef struct { s16 a, b, c, d; } SV4_80186C20; + +void func_8017F16C(void *a0) +{ + /* §183 STRUCT-view-cast. The destination TU declares this symbol four + * different ways at block scope; the reconciler flattens scope and reads + * the LAST one (`extern s32 D_800AE620;`, L6403) as the TU's spelling, so + * adopt that verbatim and take the struct view at the USE site -- exactly + * the idiom the TU itself already uses at L6420. */ + extern s32 D_800AE620; + extern void RotMatrixY(s32 a0, void *a1); + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern void RotTransSV(void *a0, void *a1, void *a2); + + Mat32_80186C20 m; + SV4_80186C20 sv; + SV4_80186C20 out; + void *mp; + + m = *(Mat32_80186C20 *)&D_800AE620; + mp = &m; + + RotMatrixY(*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12), mp); + + m.w[5] = *(s16 *)((s32)a0 + 0xFE); + m.w[6] = *(s16 *)((s32)a0 + 0xA); + m.w[7] = *(s16 *)((s32)a0 + 0x100); + + func_8004914C(mp); + func_800491AC(mp); + + sv.a = 0; + sv.b = 0; + sv.c = *(u16 *)((s32)a0 + 0xE2); + + RotTransSV(&sv, &sv, &out); + + *(s16 *)((s32)a0 + 0x6) = sv.a; + *(s16 *)((s32)a0 + 0xE) = sv.c; +} + extern s32 func_8012AD50(void *a0); extern u8 D_80183090[]; diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c b/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c index 50713bdd14..28d30bec26 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c @@ -4926,7 +4926,30 @@ s32 func_8017F42C(s32 a0, s32 a1) { } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8017BEBC", func_8017F568); + +extern void func_8002A04C(s32 a0); +extern void func_8002AC00(s32 arg0); +extern void func_8012C218(void *a0); + +void func_8017F568(void *a0) +{ + s32 v1; + + if (*(short *)((char *)a0 + 0x102) == 0) { + func_8002A04C((s32)a0); + func_8002AC00(0x1A); + } + + if (!((*(short *)((char *)a0 + 0x70) & 0x8000))) { + v1 = *(s32 *)((char *)a0 + 0x68); + if (v1 != 0 && ((*(short *)((char *)a0 + 0x72) & 0x8000))) { + *(unsigned short *)(v1 + 0xA) = *(unsigned short *)(v1 + 0xA) & 0x7FFF; + } + } + + func_8012C218(a0); +} + extern void func_801802D0(void *a0); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c index e9323ea5d8..7b7e6c80e1 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c @@ -5732,7 +5732,13 @@ void func_80187B28(void) { } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80187B80); + + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_80187B80(void *arg0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); + } + extern s32 func_8014C050(s32 a0, s32 a1); 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 086041f1e5..a2602b1978 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c @@ -4705,7 +4705,20 @@ void func_8017DCC0(u8 *a0) DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */ -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8017DD7C); + +extern s32 func_8013767C(s32 a0); +extern void func_80171A1C(u8 *a0); +extern s32 D_8012750C; +extern s32 D_80126B58; +extern s32 D_80126CF0; + +void func_8017DD7C(void) { + s32 v0; + v0 = func_8013767C(D_8012750C); + D_80126CF0 = v0; + func_80171A1C((u8 *)&D_80126B58); +} + DEFINE_func_8017DDBC() /* dedup: shared engine-core @0x8017DDBC (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_jr_80187AEC.c b/src/ov_SC06_018/ov_SC06_018_jr_80187AEC.c index 59a56fab1d..fcfd9713aa 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_80187AEC.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_80187AEC.c @@ -3281,7 +3281,25 @@ void func_801880C4(s32 a0) { } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80187AEC", func_80188234); +typedef struct { u16 x, y, z, w; } V4_80188E10_80182F80; + + +void func_80188234(s32 param_1) { + s32 obj; + s32 obj2; + u16 w; + + obj = *(s32 *)(param_1 + 0x20); + *(s32 *)(param_1 + 0x1C) = 0x18; + *(s16 *)(obj + 0x10) = 0x80; + obj2 = *(s32 *)(param_1 + 0x20); + w = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(s16 *)(obj2 + 0x12) = w; + func_8012B2CC(param_1); + func_8012B178(param_1, 0xFFF00000); + *(s16 *)(param_1 + 2) = 2; +} + extern void func_8012C218(void *a0); extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); @@ -4068,7 +4086,46 @@ s32 func_80189284(void *a0, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80187AEC", func_8018931C); + + +extern s32 func_8012C51C(void *a0, s32 a1); + +typedef struct { + u16 f10; /* 0x10 */ + u16 f12; /* 0x12 */ + u16 f14; /* 0x14 */ + s16 f16; /* 0x16 */ + s16 f18; /* 0x18 */ + s16 f1a; /* 0x1A */ + s16 f1c; /* 0x1C */ + u16 f1e; /* 0x1E */ + s32 f20; /* 0x20 */ +} buf_801873B0; + +void func_8018931C(a0, a1, a2, a3, a4, a5) +s32 a0; +void *a1; +s32 a2; +s32 a3; +u16 a4; +s32 a5; +{ + buf_801873B0 sp; + u16 t; + + sp.f10 = *(u16 *)a1; + sp.f12 = *(u16 *)(2 + (char *)a1); + t = *(u16 *)(4 + (char *)a1); + sp.f16 = a2; + sp.f18 = a3; + sp.f1a = 0; + sp.f1e = a4; + sp.f20 = a5; + sp.f1c = 0x7FFF; + sp.f14 = t; + func_8012C51C(&sp, a0); +} + extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); extern void func_8012F14C(s32 a0, s32 a1, s32 a2); diff --git a/src/ov_SC06_020/ov_SC06_020_jr_801803E0.c b/src/ov_SC06_020/ov_SC06_020_jr_801803E0.c index 587ffd8ac2..bd7afdfbfe 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_801803E0.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_801803E0.c @@ -2950,7 +2950,17 @@ void func_801808A8(u8 *a0) { } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_801803E0", func_801808F4); + + +void func_801808F4(s32 param_1) { + if (*(u8 *)(param_1 + 0xC1) != 0) { + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = func_80047948(*(s32 *)(param_1 + 0xE4) << 7) >> 5; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = func_8004787C(*(s32 *)(param_1 + 0xE4) << 7) >> 4; + func_8012B370(param_1); + *(s32 *)(param_1 + 0xE4) += 1; + } +} + extern void func_80131B14(); extern void func_8012A828(s32 a0, void *a1); diff --git a/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c b/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c index 999ade9dde..8a148041d3 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_80180B04.c @@ -4570,9 +4570,60 @@ s32 func_801833F4(void *a0, s32 a1, s32 a2) { } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80180B04", func_8018348C); -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_80180B04", func_801834F0); + +extern s32 func_8012C51C(void *a0, s32 a1); + +typedef struct { + u16 f10; /* 0x10 */ + u16 f12; /* 0x12 */ + u16 f14; /* 0x14 */ + s16 f16; /* 0x16 */ + s16 f18; /* 0x18 */ + s16 f1a; /* 0x1A */ + s16 f1c; /* 0x1C */ + u16 f1e; /* 0x1E */ + s32 f20; /* 0x20 */ +} buf_801873B0; + +void func_8018348C(a0, a1, a2, a3, a4, a5) +s32 a0; +void *a1; +s32 a2; +s32 a3; +u16 a4; +s32 a5; +{ + buf_801873B0 sp; + u16 t; + + sp.f10 = *(u16 *)a1; + sp.f12 = *(u16 *)(2 + (char *)a1); + t = *(u16 *)(4 + (char *)a1); + sp.f16 = a2; + sp.f18 = a3; + sp.f1a = 0; + sp.f1e = a4; + sp.f20 = a5; + sp.f1c = 0x7FFF; + sp.f14 = t; + func_8012C51C(&sp, a0); +} + + + +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); + +void func_801834F0(s32 a0, void *a1, void *a2, s32 a3) { + s32 buf0; + s32 buf1; + s32 buf2; + s32 temp[8]; + func_8012EC04(a0, a3, temp); + func_8012F14C((s32)temp, (s32)a1, (s32)a2); +} + extern s32 func_8012B6D4(s16 *a0, s16 *a1); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c b/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c index a8963dfacb..f7ce163ddb 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8017BEBC.c @@ -4569,7 +4569,13 @@ s32 func_8017F830(s16 *a0) { INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_8017F85C); -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_8017F9FC); + + +extern void func_8012AD44(s32 *a0, s16 a1); + void func_8017F9FC(void *arg0) { + ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 1); + } + extern void func_801800CC(s32 a0); extern void func_8002D4C8(s32 a0, s32 a1); @@ -5147,7 +5153,32 @@ void func_80180838(void *a0) } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8017BEBC", func_801809D4); + + + + + + + + + + + + + + + + + + +extern void func_8012AD44(s32 *a0, s16 a1); +void func_801809D4(void) +{ + int new_var; + ((void (*)(s32, s32)) func_8012AD44)(new_var, 3); + new_var = 0x51AB; +} + /* ---- callees (TU canon: src/ov_SC06_024/ov_SC06_024_jr_8017BEBC.c L3514/3515) ---- */ diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184304.c b/src/ov_SC06_022/ov_SC06_022_jr_80184304.c index e0cbcb3e27..d61635dbfb 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184304.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184304.c @@ -2998,7 +2998,17 @@ void func_801847CC(s32 *a0) { } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184304", func_80184818); + + +void func_80184818(s32 param_1) { + if (*(u8 *)(param_1 + 0xC1) != 0) { + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = func_80047948(*(s32 *)(param_1 + 0xE4) << 7) >> 5; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = func_8004787C(*(s32 *)(param_1 + 0xE4) << 7) >> 4; + func_8012B370(param_1); + *(s32 *)(param_1 + 0xE4) += 1; + } +} + extern void func_802A828_dummy_never_used(void); extern void func_8012A828(s32 a0, void *a1); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c index a52f435c59..9f21989148 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c @@ -4477,7 +4477,19 @@ s32 a5; } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_80187414); + +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); + +void func_80187414(s32 a0, void *a1, void *a2, s32 a3) { + s32 buf0; + s32 buf1; + s32 buf2; + s32 temp[8]; + func_8012EC04(a0, a3, temp); + func_8012F14C((s32)temp, (s32)a1, (s32)a2); +} + extern s32 func_8012B6D4(s16 *a0, s16 *a1); diff --git a/src/ov_SC06_024/ov_SC06_024_jr_801867DC.c b/src/ov_SC06_024/ov_SC06_024_jr_801867DC.c index dee178bb9c..e89e7f83df 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_801867DC.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_801867DC.c @@ -3032,7 +3032,17 @@ void func_80186CA4(s32 param_1) { } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801867DC", func_80186CF0); + + +void func_80186CF0(s32 param_1) { + if (*(u8 *)(param_1 + 0xC1) != 0) { + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = func_80047948(*(s32 *)(param_1 + 0xE4) << 7) >> 5; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = func_8004787C(*(s32 *)(param_1 + 0xE4) << 7) >> 4; + func_8012B370(param_1); + *(s32 *)(param_1 + 0xE4) += 1; + } +} + extern void func_80131B14(); extern void func_8012A828(s32 a0, void *a1); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c index a14d8357f8..5afbed82f3 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c @@ -3432,7 +3432,61 @@ void func_8017DC70(s32 param_1, s16 *param_2) { } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017DE08); + + +extern void *func_80010A08(s32 a0); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8005A600(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern s32 AddPrim(s32 a0, void *a1); +extern s32 D_800A651C; +extern s16 D_800B9A02; + +s32 func_8017DE08(s32 a0) +{ + u8 *p; + s32 ot; + s32 tp; + register s32 c1 __asm__("$3"); + + ot = *(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)); + + p = (u8 *)func_80010A08(0x30); + if (p != 0) { + tp = GetTPage(0, 1, 0, 0); + func_8005A600((s32)p, 0, 0, (u16)tp, 0); + + /* r0,r1,r2,r3 then g0..g3 then b0..b3 -- one load each */ + *(u8 *)(p + 0x10) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x18) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x20) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x28) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x11) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x19) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x21) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x29) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x12) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x1A) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x22) = *(s32 *)((u8 *)a0 + 0x1C); + *(u8 *)(p + 0x2A) = *(s32 *)((u8 *)a0 + 0x1C); + + *(u8 *)(p + 0xF) = 8; /* tag len */ + *(u8 *)(p + 0x13) = 0x3A; /* code */ + + *(s16 *)(p + 0x1C) = 0xA0; /* x1 */ + *(s16 *)(p + 0x2C) = 0xA0; /* x3 */ + *(s16 *)(p + 0x16) = -0x78; /* y0 */ + *(s16 *)(p + 0x1E) = -0x78; /* y1 */ + c1 = -0xA0; + *(s16 *)(p + 0x14) = c1; /* x0 */ + *(s16 *)(p + 0x24) = c1; /* x2 */ + *(s16 *)(p + 0x26) = 0x78; /* y2 */ + *(s16 *)(p + 0x2E) = 0x78; /* y3 */ + + AddPrim(ot, p + 0xC); + AddPrim(ot, p); + } +} + INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017DF70); diff --git a/src/ov_SC06_033/ov_SC06_033_jr_80186574.c b/src/ov_SC06_033/ov_SC06_033_jr_80186574.c index 5bfa3b7629..e8aed23953 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_80186574.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_80186574.c @@ -3984,7 +3984,19 @@ s32 a5; } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_80186574", func_80187E08); + +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); + +void func_80187E08(s32 a0, void *a1, void *a2, s32 a3) { + s32 buf0; + s32 buf1; + s32 buf2; + s32 temp[8]; + func_8012EC04(a0, a3, temp); + func_8012F14C((s32)temp, (s32)a1, (s32)a2); +} + extern s32 func_8012B6D4(s16 *a0, s16 *a1); diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c index 091267305c..e2cf577bde 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c @@ -8847,7 +8847,13 @@ void aF801866D4(void) } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8018672C); + + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_8018672C(void *arg0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); + } + extern s32 func_8014C050(s32 a0, s32 a1); diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8017AE2C.c b/src/ov_SC07_009/ov_SC07_009_jr_8017AE2C.c index 5041308e22..a953f2a93b 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8017AE2C.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8017AE2C.c @@ -3886,7 +3886,29 @@ s32 func_8017CF44(void *a0) { } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8017AE2C", func_8017CFC0); + +extern s32 func_800167F0(s32 a0); +extern void func_80029514(s32 a0); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8002AEE4(void); +extern s8 D_80078EC6; + +s32 func_8017CFC0(void) { + s32 v0; + + v0 = func_800167F0(4); + if ((v0 & 0xFFFF) != 0) { + func_80029514(0x6A4); + func_80029124(0x11D, 1); + func_80029124(0x123, 1); + D_80078EC6 = 1; + func_8002AEE4(); + return 1; + } + + return 0; +} + extern void (*D_80181858[])(void);