From 9d2e4171cfd611e1f923ce883d7730a2d59bd49f Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sat, 1 Aug 2026 09:26:41 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-30=20S2):=20func=5F8016EC0C=20siblin?= =?UTF-8?q?g=20sweep=20=E2=80=94=2088=20ins=20x137=20(void-flip=20edit=20+?= =?UTF-8?q?=20h=5Fseq=20remap)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_006/ov_SC07_006_jr_8016AE5C.c | 81 +++++++++++++++++++++-- src/ov_SC07_007/ov_SC07_007_jr_8016AE5C.c | 81 +++++++++++++++++++++-- src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c | 81 +++++++++++++++++++++-- src/ov_SC07_010/ov_SC07_010_jr_8016AE5C.c | 81 +++++++++++++++++++++-- src/ov_SC07_011/ov_SC07_011_jr_8016AE5C.c | 81 +++++++++++++++++++++-- 137 files changed, 10412 insertions(+), 685 deletions(-) diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c index b68cd34078..70324caa16 100644 --- a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c +++ b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c @@ -3679,7 +3679,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3717,7 +3717,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181FC8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3739,7 +3739,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181FB8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3761,7 +3761,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181FC8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3778,7 +3778,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181FB4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181FB4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c index 8fffdd893e..e3a0829033 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80186C18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80186C08[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80186C18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80186C04[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80186C04[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c index 145988d099..cff23aa65a 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801825DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801825CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801825DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801825C8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801825C8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c index 8d5c3168b4..3e8c5a8cba 100644 --- a/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c +++ b/src/ov_SC01_005/ov_SC01_005_jr_8016AB6C.c @@ -3678,7 +3678,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3716,7 +3716,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3738,7 +3738,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185760[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3760,7 +3760,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3777,7 +3777,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018575C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018575C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c index fa04a3b680..5963c33b18 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.c @@ -3678,7 +3678,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3716,7 +3716,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3738,7 +3738,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185760[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3760,7 +3760,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185770[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3777,7 +3777,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018575C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018575C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c index 7c5ffe522a..e10eac1cc1 100644 --- a/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c +++ b/src/ov_SC01_008/ov_SC01_008_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182B50[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182B40[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182B50[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182B3C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182B3C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c index 46ff3a951a..6c30ba1850 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185D38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185D28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185D38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185D24[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185D24[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c index 9fffbc390d..bf03bb66f6 100644 --- a/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c +++ b/src/ov_SC01_074/ov_SC01_074_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801819B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801819A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801819B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801819A4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801819A4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c index cc86c28901..f345243679 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80186918[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80186908[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80186918[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80186904[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80186904[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c index 8f9a8a964b..b334710a56 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8016AB6C.c @@ -3678,7 +3678,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3716,7 +3716,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189C0C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3738,7 +3738,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189BFC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3760,7 +3760,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189C0C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3777,7 +3777,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189BF8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189BF8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c index 4ead8824a5..671193be86 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.c @@ -3675,7 +3675,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3713,7 +3713,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3735,7 +3735,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018DFAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3757,7 +3757,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3774,7 +3774,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018DFA8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018DFA8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c index 6c472166d6..b125ec9467 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.c @@ -3675,7 +3675,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3713,7 +3713,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3735,7 +3735,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018DFAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3757,7 +3757,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018DFBC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3774,7 +3774,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018DFA8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018DFA8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c index d7d7226fd6..9013f669d1 100644 --- a/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c +++ b/src/ov_SC02_004/ov_SC02_004_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018109C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018108C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018109C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181088[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181088[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c index bba9f2cbb7..70f855a9ae 100644 --- a/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c +++ b/src/ov_SC02_005/ov_SC02_005_jr_8016AB6C.c @@ -3679,7 +3679,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3717,7 +3717,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80193CA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3739,7 +3739,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80193C90[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3761,7 +3761,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80193CA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3778,7 +3778,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80193C8C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80193C8C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c index 3d435b49eb..54d2208965 100644 --- a/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c +++ b/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801940F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801940E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801940F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801940DC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801940DC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c index b47e0d016f..2930db26ab 100644 --- a/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c +++ b/src/ov_SC02_015/ov_SC02_015_jr_8016AB6C.c @@ -3675,7 +3675,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3713,7 +3713,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181604[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3735,7 +3735,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801815F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3757,7 +3757,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181604[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3774,7 +3774,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801815F0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801815F0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c index 6edcbd94ca..b149541757 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018783C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018782C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018783C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80187828[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80187828[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c index dc1974c6d2..2a932bd12a 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018D894[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018D884[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018D894[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018D880[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018D880[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c index b25b089ac3..d81a2fc411 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182E88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182E78[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182E88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182E74[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182E74[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c index bbd4e1f442..25446d0426 100644 --- a/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c +++ b/src/ov_SC02_026/ov_SC02_026_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801894DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801894CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801894DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801894C8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801894C8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c index 50ae75ab86..9a705ddc07 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018E600[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018E5F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018E600[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018E5EC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018E5EC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c index 376183a1f1..1b779776ce 100644 --- a/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c +++ b/src/ov_SC02_028/ov_SC02_028_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018E804[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018E7F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018E804[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018E7F0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018E7F0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c index e67b78cd6d..269633871b 100644 --- a/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c +++ b/src/ov_SC02_031/ov_SC02_031_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188030[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188020[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188030[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018801C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018801C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c index 1f8b770623..9387170680 100644 --- a/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c +++ b/src/ov_SC02_035/ov_SC02_035_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187890[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187880[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187890[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018787C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018787C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c index 6ed797c0cf..a579955681 100644 --- a/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c +++ b/src/ov_SC02_039/ov_SC02_039_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801824BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801824AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801824BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801824A8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801824A8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c index d0567ab820..6dfdf9cd0a 100644 --- a/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c +++ b/src/ov_SC02_041/ov_SC02_041_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018818C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018817C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018818C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188178[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188178[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c index 67d69d1a39..dfe9982852 100644 --- a/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c +++ b/src/ov_SC03_001/ov_SC03_001_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801908CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801908BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801908CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801908B8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801908B8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c index 29556f0ad7..3fdd1f95e6 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801888BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801888AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801888BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801888A8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801888A8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c index a1adbc339b..0c521f75ed 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182684[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182674[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182684[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182670[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182670[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c index d269f13844..332a49c1a5 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018F9A0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018F990[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018F9A0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018F98C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018F98C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c index 88698fe72b..1bfe65bec7 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018A798[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018A788[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018A798[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018A784[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018A784[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c index 6d01ea4def..32f580219b 100644 --- a/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c +++ b/src/ov_SC03_010/ov_SC03_010_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801832B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801832A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801832B8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801832A4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801832A4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c index 9ad5d0fd37..8a86d04b5f 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80184628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80184618[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80184628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80184614[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80184614[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c index f4b4a61359..7c954cac21 100644 --- a/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c +++ b/src/ov_SC03_012/ov_SC03_012_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181508[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801814F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181508[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801814F4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801814F4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c index 4b930301e3..58818764a6 100644 --- a/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c +++ b/src/ov_SC03_013/ov_SC03_013_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801842F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801842E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801842F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801842DC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801842DC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c index 7115c49fa2..dae5a25428 100644 --- a/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c +++ b/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018E91C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018E918[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018E918[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c index 1173112564..6b93f07ef7 100644 --- a/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c +++ b/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018E91C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018E92C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018E918[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018E918[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c index 823987eaaa..b9e98aa595 100644 --- a/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c +++ b/src/ov_SC03_023/ov_SC03_023_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801822A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182298[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801822A8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182294[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182294[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c index fb43894480..87e06d23b5 100644 --- a/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c +++ b/src/ov_SC03_024/ov_SC03_024_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018A2CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018A2BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018A2CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018A2B8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018A2B8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c index 6a65c8179f..08e1ba50c3 100644 --- a/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c +++ b/src/ov_SC03_028/ov_SC03_028_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018ED98[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018ED88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018ED98[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018ED84[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018ED84[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c index 0eb29f7630..5f9873f422 100644 --- a/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c +++ b/src/ov_SC03_029/ov_SC03_029_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018ABD0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018ABC0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018ABD0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018ABBC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018ABBC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c index c39fcce294..bfb9ffa718 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018520C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801851FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018520C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801851F8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801851F8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c index ad3cb76835..f15b662af8 100644 --- a/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c +++ b/src/ov_SC03_031/ov_SC03_031_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185728[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185718[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185728[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185714[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185714[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c index 484e180b84..577cc7c639 100644 --- a/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c +++ b/src/ov_SC03_089/ov_SC03_089_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018CA24[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018CA14[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018CA24[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018CA10[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018CA10[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c index 1e8ddc9795..a3b5a2afc3 100644 --- a/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c +++ b/src/ov_SC03_090/ov_SC03_090_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018EE48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018EE38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018EE48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018EE34[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018EE34[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c index cbc5953488..b6e9fc9af4 100644 --- a/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c +++ b/src/ov_SC03_091/ov_SC03_091_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018FCF0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018FCE0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018FCF0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018FCDC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018FCDC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c index dfe1ea3121..e7246b2190 100644 --- a/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c +++ b/src/ov_SC03_092/ov_SC03_092_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801880C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801880B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801880C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801880AC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801880AC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c index 7011606bb8..e54d8ae187 100644 --- a/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c +++ b/src/ov_SC03_093/ov_SC03_093_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189298[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189288[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189298[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189284[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189284[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c index 8533907f23..a974eddd67 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018AC94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018AC84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018AC94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018AC80[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018AC80[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c index 3e410f6aec..3643411d26 100644 --- a/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c +++ b/src/ov_SC03_095/ov_SC03_095_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801842F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801842E4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801842F4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801842E0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801842E0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c index b7339be669..27816ba6c6 100644 --- a/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c +++ b/src/ov_SC03_096/ov_SC03_096_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80183E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80183E64[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80183E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80183E60[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80183E60[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c index e4c93aefbe..26a7c8d6d6 100644 --- a/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c +++ b/src/ov_SC03_097/ov_SC03_097_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189254[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189244[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189254[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189240[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189240[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c index ce2d26e867..3efa55e5cd 100644 --- a/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c +++ b/src/ov_SC03_098/ov_SC03_098_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801886E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801886D0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801886E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801886CC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801886CC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c index 524cc862f5..f2bb369b21 100644 --- a/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c +++ b/src/ov_SC03_099/ov_SC03_099_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801867E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801867D0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801867E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801867CC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801867CC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c index e6d1609424..1792a0deef 100644 --- a/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c +++ b/src/ov_SC03_100/ov_SC03_100_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187CAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187C9C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187CAC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80187C98[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80187C98[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c index 289c7e9a0c..0705f12874 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80186C88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80186C78[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80186C88[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80186C74[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80186C74[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c index fb70e5166c..b69df52b56 100644 --- a/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c +++ b/src/ov_SC03_102/ov_SC03_102_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189540[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189530[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189540[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018952C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018952C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c index a7d0d53842..74207d39a1 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801874F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801874E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801874F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801874DC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801874DC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c index 6b88db7506..9d50dcddad 100644 --- a/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c +++ b/src/ov_SC03_104/ov_SC03_104_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018E080[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018E070[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018E080[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018E06C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018E06C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c index a6a3ab783b..fa487f43b0 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018D708[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018D6F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018D708[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018D6F4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018D6F4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c index a55b7e6d54..8178c09197 100644 --- a/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c +++ b/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.c @@ -3627,7 +3627,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3665,7 +3665,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80184060[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3687,7 +3687,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80184050[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3709,7 +3709,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80184060[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3726,7 +3726,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018404C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018404C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c index 9724d4fbd5..e31722479d 100644 --- a/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c +++ b/src/ov_SC03_109/ov_SC03_109_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018170C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801816FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018170C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801816F8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801816F8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c index 68854277e4..0a342b34b6 100644 --- a/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c +++ b/src/ov_SC03_110/ov_SC03_110_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018512C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018511C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018512C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185118[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185118[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c index 85336007cd..a4d65412d6 100644 --- a/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c +++ b/src/ov_SC03_111/ov_SC03_111_jr_8016AB6C.c @@ -3677,7 +3677,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3715,7 +3715,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187CE0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3737,7 +3737,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187CD0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3759,7 +3759,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187CE0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3776,7 +3776,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80187CCC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80187CCC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c index 851bef4e71..d5c2ee09a7 100644 --- a/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c +++ b/src/ov_SC03_112/ov_SC03_112_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188AE8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188AD8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188AE8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188AD4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188AD4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c index e71ddd7a6d..69f107f254 100644 --- a/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c +++ b/src/ov_SC03_113/ov_SC03_113_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80186198[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80186188[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80186198[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80186184[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80186184[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c index af00d249ca..5a016457c8 100644 --- a/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c +++ b/src/ov_SC03_114/ov_SC03_114_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181E00[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181DF0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181E00[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181DEC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181DEC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c index db646d2873..fcf7d454c5 100644 --- a/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c +++ b/src/ov_SC03_115/ov_SC03_115_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018386C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018385C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018386C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80183858[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80183858[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c index 302fe66b5a..1cd2376375 100644 --- a/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c +++ b/src/ov_SC03_116/ov_SC03_116_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185C70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185C60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185C70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185C5C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185C5C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c index fb6228d2c3..4d1744dfb9 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187C7C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187C6C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187C7C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80187C68[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80187C68[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c index e8214ce427..b1b9ae5c96 100644 --- a/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c +++ b/src/ov_SC03_118/ov_SC03_118_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018CD18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018CD14[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018CD14[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c index e18ed8e12c..9920b9a538 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018CD18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018CD28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018CD14[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018CD14[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c index 1cc474c325..3ac6da3a6e 100644 --- a/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c +++ b/src/ov_SC03_121/ov_SC03_121_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185544[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185534[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185544[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185530[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185530[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c index c937c1f51e..9b70be6f17 100644 --- a/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c +++ b/src/ov_SC03_124/ov_SC03_124_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018DF70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018DF60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018DF70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018DF5C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018DF5C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c index a6f4e35e7d..b85b41eb4a 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187140[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187130[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187140[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018712C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018712C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c index bfd955303b..549f21d1a2 100644 --- a/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c +++ b/src/ov_SC03_126/ov_SC03_126_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182624[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182624[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c index 19942f76fe..f988ae8160 100644 --- a/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c +++ b/src/ov_SC04_000/ov_SC04_000_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80186644[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80186634[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80186644[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80186630[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80186630[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c index 9bc692c78f..62e487faae 100644 --- a/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c +++ b/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018B7B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018B7A0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018B7B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018B79C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018B79C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c index 537ad4cc3a..a2dddc877c 100644 --- a/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c +++ b/src/ov_SC04_003/ov_SC04_003_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018554C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018553C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018554C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185538[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185538[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c index 9a187f2ff5..9b5a46e4ca 100644 --- a/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c +++ b/src/ov_SC04_004/ov_SC04_004_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80187A80[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80187A70[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80187A80[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80187A6C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80187A6C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c index 0824768af9..9b62825961 100644 --- a/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c +++ b/src/ov_SC04_005/ov_SC04_005_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018AEB4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018AEA4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018AEB4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018AEA0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018AEA0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c index 1f1c3677d0..f3f67576b8 100644 --- a/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c +++ b/src/ov_SC04_006/ov_SC04_006_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182F94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182F84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182F94[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182F80[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182F80[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c index 8011163306..7a7abd2ab4 100644 --- a/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c +++ b/src/ov_SC04_007/ov_SC04_007_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188F4C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188F3C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188F4C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188F38[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188F38[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c index 22b28a39e1..e1644f0b2f 100644 --- a/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c +++ b/src/ov_SC04_008/ov_SC04_008_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181E70[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181E70[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c index 8ab70131db..fca0607090 100644 --- a/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c +++ b/src/ov_SC04_009/ov_SC04_009_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181EB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181EA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181EB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181E9C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181E9C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c index a408eec38e..64b5184198 100644 --- a/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c +++ b/src/ov_SC04_010/ov_SC04_010_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018155C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018154C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018155C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181548[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181548[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c index e9f147e5ac..399e117705 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801937EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801937DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801937EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801937D8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801937D8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c index c4bbf2d53b..4a63490dad 100644 --- a/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c +++ b/src/ov_SC04_012/ov_SC04_012_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801819C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801819B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801819C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801819AC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801819AC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c index 4ad0a54a0a..2a86a23ed2 100644 --- a/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c +++ b/src/ov_SC04_015/ov_SC04_015_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801878F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801878E8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801878F8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801878E4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801878E4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c index 4ec388d37c..91effdc127 100644 --- a/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c +++ b/src/ov_SC04_016/ov_SC04_016_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801833BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801833AC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801833BC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801833A8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801833A8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c index 1aaa716307..df6e1625bc 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801905C4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801905C0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801905C0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c index afd77d10c9..3f64c458da 100644 --- a/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c +++ b/src/ov_SC04_019/ov_SC04_019_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801905C4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801905D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801905C0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801905C0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c index b37b94af81..5118cd8302 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018670C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801866FC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018670C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801866F8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801866F8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c index d9cace3331..05e7b70644 100644 --- a/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c +++ b/src/ov_SC04_021/ov_SC04_021_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182624[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182624[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c index c444a70a43..8171e64ce1 100644 --- a/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c +++ b/src/ov_SC05_000/ov_SC05_000_jr_8016AB6C.c @@ -3674,7 +3674,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3712,7 +3712,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018164C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3734,7 +3734,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018163C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3756,7 +3756,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018164C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3773,7 +3773,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181638[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181638[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c index c8daa5d6ed..d7f4c0ac33 100644 --- a/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c +++ b/src/ov_SC05_001/ov_SC05_001_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188E28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188E18[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188E28[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188E14[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188E14[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c index 99a1f63252..0aeafc65e1 100644 --- a/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c +++ b/src/ov_SC05_002/ov_SC05_002_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801835E8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801835D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801835E8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801835D4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801835D4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c index f18bf27474..b5bc2baa5f 100644 --- a/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c +++ b/src/ov_SC05_003/ov_SC05_003_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185920[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185910[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185920[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018590C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018590C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c index 421162272c..cf40206357 100644 --- a/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c +++ b/src/ov_SC05_004/ov_SC05_004_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80184A2C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80184A1C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80184A2C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80184A18[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80184A18[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c index 4f0f36b1d7..6a7f458019 100644 --- a/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c +++ b/src/ov_SC05_005/ov_SC05_005_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185800[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801857F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185800[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801857EC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801857EC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c index 6b986313ca..50913c9b18 100644 --- a/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c +++ b/src/ov_SC05_006/ov_SC05_006_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182820[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182810[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182820[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018280C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018280C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c index c34e24b4a5..88e4b01012 100644 --- a/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c +++ b/src/ov_SC05_007/ov_SC05_007_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80183E1C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80183E0C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80183E1C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80183E08[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80183E08[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c index 0bca459298..b41bc80a41 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185D74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185D64[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185D74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185D60[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185D60[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c index 57438b6f4a..4c37e6a3ed 100644 --- a/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c +++ b/src/ov_SC05_009/ov_SC05_009_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181E74[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181E84[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181E70[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181E70[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c index 69a28eb8ec..7f5f9f8c7b 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018BD60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018BD50[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018BD60[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018BD4C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018BD4C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c index b291121295..897cc593c6 100644 --- a/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c +++ b/src/ov_SC05_011/ov_SC05_011_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801810D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801810C8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801810D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801810C4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801810C4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c index 8d9aeb143c..a5b870da3b 100644 --- a/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c +++ b/src/ov_SC05_017/ov_SC05_017_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80190598[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80190588[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80190598[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80190584[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80190584[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c index 1dee7eed33..0fcbaee0ba 100644 --- a/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c +++ b/src/ov_SC05_018/ov_SC05_018_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189CF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189CE4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189CF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189CE0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189CE0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c index 080980a414..eb8c5bb98d 100644 --- a/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c +++ b/src/ov_SC05_019/ov_SC05_019_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80182628[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80182638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80182624[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80182624[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c index 201f0fe7a4..50291bdaca 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018B648[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018B638[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018B648[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018B634[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018B634[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c index d7c1da8665..1ac664d446 100644 --- a/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c +++ b/src/ov_SC06_006/ov_SC06_006_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018516C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018515C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018516C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185158[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185158[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c index 52853970c8..7faccb427a 100644 --- a/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c +++ b/src/ov_SC06_008/ov_SC06_008_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188BD4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188BC4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188BD4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188BC0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188BC0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c index 1d566d7410..90a344d476 100644 --- a/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c +++ b/src/ov_SC06_010/ov_SC06_010_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189DB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189DA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189DB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189D9C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189D9C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c index f6e983f3d5..a0417b761d 100644 --- a/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c +++ b/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80183810[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80183800[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80183810[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801837FC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801837FC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c index 8addc9ed12..3207735887 100644 --- a/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c +++ b/src/ov_SC06_013/ov_SC06_013_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181F8C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181F7C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181F8C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181F78[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181F78[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c index 496e51e6b8..9ec41f3578 100644 --- a/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c +++ b/src/ov_SC06_014/ov_SC06_014_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801832F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801832E0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801832F0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801832DC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801832DC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c index 839c4ddfa8..5f335b3c58 100644 --- a/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c +++ b/src/ov_SC06_015/ov_SC06_015_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181E48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181E38[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181E48[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181E34[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181E34[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c index 4cd227fecf..f23bad5b77 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188258[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188248[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188258[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188244[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188244[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c index 1c7e6bf598..1f07747b54 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80196994[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80196984[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80196994[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80196980[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80196980[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c index 7aefb6130d..38b7bbd41d 100644 --- a/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c +++ b/src/ov_SC06_020/ov_SC06_020_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018841C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018840C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018841C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188408[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188408[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c index 6281ea0e61..6aa35a3107 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801906D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801906C8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801906D8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801906C4[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801906C4[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c index a6562c9476..c58ed661ed 100644 --- a/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c +++ b/src/ov_SC06_024/ov_SC06_024_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80192BB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80192BA0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80192BB0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80192B9C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80192B9C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c index 40b5c5fcf9..4a9383ef86 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80188054[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80188044[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80188054[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80188040[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80188040[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c index ba6e062a93..3205183c90 100644 --- a/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c +++ b/src/ov_SC06_027/ov_SC06_027_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181394[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181384[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181394[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181380[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181380[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c index 15e533f414..ae976b35e3 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_8018F928[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_8018F918[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_8018F928[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018F914[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018F914[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c index e88b5851a7..3169e97b35 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185218[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185208[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185218[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185204[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185204[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c index 5c6cb05a69..e2bdd00360 100644 --- a/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c +++ b/src/ov_SC06_032/ov_SC06_032_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801966E4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801966D4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801966E4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801966D0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801966D0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c index 0b778321f6..7d09e06638 100644 --- a/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c +++ b/src/ov_SC06_033/ov_SC06_033_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80194BF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80194BE4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80194BF4[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80194BE0[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80194BE0[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c index f85b58f6c4..ce075fa6af 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80185A3C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80185A2C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80185A3C[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80185A28[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80185A28[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c index bf71852689..77ded469f5 100644 --- a/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c +++ b/src/ov_SC07_001/ov_SC07_001_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801848EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801848DC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801848EC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801848D8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801848D8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c index 9536bf06c2..f434412247 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80189BA8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80189B98[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80189BA8[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80189B94[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80189B94[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8016AE5C.c b/src/ov_SC07_006/ov_SC07_006_jr_8016AE5C.c index 2876ede9a1..7fb56512f1 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8016AE5C.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8016AE5C.c @@ -4476,7 +4476,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern void func_80024054(void*, void*); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -4513,7 +4513,7 @@ void func_8016E9EC(u8 *p) // @class: struct // @stuck: none — MATCH (31/31 ins, match_one verified) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -4536,7 +4536,7 @@ void func_8016EAC0(Wave *param_1) // @class: loose-typing // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { @@ -4559,7 +4559,7 @@ void func_8016EB3C(s32 p) { // @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_8018D7CC[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -4578,7 +4578,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8016AE5C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018D7B8[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018D7B8[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + extern void func_80146C3C(u8*); void func_8016ED6C(void) { diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8016AE5C.c b/src/ov_SC07_007/ov_SC07_007_jr_8016AE5C.c index 66722c8aa9..0fff22fcf9 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8016AE5C.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8016AE5C.c @@ -4464,7 +4464,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern void func_80024054(void*, void*); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -4501,7 +4501,7 @@ void func_8016E9EC(u8 *p) // @class: struct // @stuck: none — MATCH (31/31 ins, match_one verified) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -4524,7 +4524,7 @@ void func_8016EAC0(Wave *param_1) // @class: loose-typing // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { @@ -4547,7 +4547,7 @@ void func_8016EB3C(s32 p) { // @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_801862F0[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -4566,7 +4566,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8016AE5C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801862DC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801862DC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + extern void func_80146C3C(u8*); void func_8016ED6C(void) { diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c index bb3a45398c..9b028ee8a2 100644 --- a/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c +++ b/src/ov_SC07_008/ov_SC07_008_jr_8016AB6C.c @@ -3675,7 +3675,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3713,7 +3713,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_801806C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3735,7 +3735,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_801806B0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3757,7 +3757,7 @@ void func_8016EB3C(s32 p) { extern u16 D_801806C0[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3774,7 +3774,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_801806AC[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_801806AC[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c index a45dd1d9fb..0109318492 100644 --- a/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c +++ b/src/ov_SC07_009/ov_SC07_009_jr_8016AB6C.c @@ -3676,7 +3676,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern s32 func_80024054(void *a0, void *a1); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3714,7 +3714,7 @@ void func_8016E9EC(u8 *p) // @stuck: none — MATCH (31/31 ins, match_one verified) extern u16 D_80181164[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3736,7 +3736,7 @@ void func_8016EAC0(Wave *param_1) // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) extern u8 D_80181154[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { u8 v; @@ -3758,7 +3758,7 @@ void func_8016EB3C(s32 p) { extern u16 D_80181164[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -3775,7 +3775,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8016AB6C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181150[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181150[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + DEFINE_func_8016ED6C() /* dedup: shared engine-core @0x8016ED6C (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8016AE5C.c b/src/ov_SC07_010/ov_SC07_010_jr_8016AE5C.c index 5266578da0..8f6b09ba72 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8016AE5C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8016AE5C.c @@ -3913,7 +3913,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern void func_80024054(void*, void*); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -3950,7 +3950,7 @@ void func_8016E9EC(u8 *p) // @class: struct // @stuck: none — MATCH (31/31 ins, match_one verified) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -3973,7 +3973,7 @@ void func_8016EAC0(Wave *param_1) // @class: loose-typing // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { @@ -3996,7 +3996,7 @@ void func_8016EB3C(s32 p) { // @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80185380[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -4015,7 +4015,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8016AE5C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_8018536C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_8018536C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + extern void func_80146C3C(u8*); void func_8016ED6C(void) { diff --git a/src/ov_SC07_011/ov_SC07_011_jr_8016AE5C.c b/src/ov_SC07_011/ov_SC07_011_jr_8016AE5C.c index 3e6827339c..12ae83f405 100644 --- a/src/ov_SC07_011/ov_SC07_011_jr_8016AE5C.c +++ b/src/ov_SC07_011/ov_SC07_011_jr_8016AE5C.c @@ -4464,7 +4464,7 @@ s32 func_8016E95C() { extern s32 func_800D2CA8(s32 a0, s32 a1); extern void func_800D2D10(s32 a0, s32 a1, void *a2, s32 a3); extern void func_80024054(void*, void*); -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016E9EC(u8 *p) { @@ -4501,7 +4501,7 @@ void func_8016E9EC(u8 *p) // @class: struct // @stuck: none — MATCH (31/31 ins, match_one verified) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EAC0(Wave *param_1) { @@ -4524,7 +4524,7 @@ void func_8016EAC0(Wave *param_1) // @class: loose-typing // @stuck: none — MATCH (u8 v + 0xFF emits addiu 0xFF; v-1 would emit -1/0xffff) -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EB3C(s32 p) { @@ -4547,7 +4547,7 @@ void func_8016EB3C(s32 p) { // @stuck: none — MATCH (25 ins). %lo-fold via extern u16 D_80181A40[]; predecrement emitted as +0xFF (u8 promote→sb low byte), not -1. -extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EC0C(s32 a0, s32 a1); void func_8016EBA8(u8 *param_1) { @@ -4566,7 +4566,78 @@ void func_8016EBA8(u8 *param_1) } -INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8016AE5C", func_8016EC0C); + +extern void func_80017B98(void *a0); +extern u8 D_80181A2C[]; + +void func_8016EC0C(s32 a0, s32 a1) +{ + /* §100 draft-LOCAL type: a file-scope typedef is an EXEMPLAR-ONLY bank — extract_unit/ + remap_hseq carry only the BODY, so every sibling fails `T8016EC0C undeclared` + (measured on ov_SC01_000). Block scope travels with the body; byte-neutral. */ + typedef struct { + /* 0x00 */ s16 x; + /* 0x02 */ s16 y; + /* 0x04 */ s32 u04; + /* 0x08 */ s16 u08; + /* 0x0A */ s16 u0A; + /* 0x0C */ s16 u0C; + /* 0x0E */ s16 u0E; + /* 0x10 */ u8 r; + /* 0x11 */ u8 g; + /* 0x12 */ u8 b; + /* 0x13 */ u8 pad13; + /* 0x14 */ s32 u14; + /* 0x18 */ u8 u18; + /* 0x19 */ u8 pad19[3]; + } T8016EC0C; /* 0x1C */ + T8016EC0C s; + u16 *p; + s32 x; + s32 y; + s32 v; + + s.r = s.g = s.b = a1; + s.u18 = D_80181A2C[*(u8 *)(a0 + 3)]; + s.u0C = 0x640; + s.u0E = 0x1C8; + s.u14 = 0; + s.u08 = 0x28; + s.u0A = 8; + x = *(u16 *)(a0 + 4); + s.x = x + 0x10; + y = *(u16 *)(a0 + 6); + s.u04 = 0x10; + s.y = y; + func_80017B98(&s); + s.u08 = 8; + y += 0xA; + p = (u16 *)(a0 + 8); + while (*p != 0xFFFF) { + v = *p; + switch (v) { + case 0x1850: + case 0x1858: + s.x = x + 4; + s.y = y - 7; + break; + case 0x3872: + x += 2; + p++; + continue; + default: + s.x = x; + s.y = y; + x += 8; + break; + } + s.u0C = *(u8 *)p + 0x500; + s.u0E = (*p >> 8) + 0x100; + p++; + func_80017B98(&s); + } +} + extern void func_80146C3C(u8*); void func_8016ED6C(void) {