From 00d9d9d491ca0342892d6cfd41272e36a37355b6 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Thu, 2 Jul 2026 02:02:25 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-23):=20T10.9=20=E2=80=94=202=20fresh?= =?UTF-8?q?=20hard-band=20GLM=20banks;=20fresh=20hand-solve=20confirms=20i?= =?UTF-8?q?diom=20well=20is=20DRY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GLM deep-solved 15 fresh 25-118-ins hard fns: 4/15 match_one, 2 whole-binary banks (func_8017DE28, func_8015EEE0), $2.00. def-side wall caps the other 2 correct bodies. - IDIOM VERDICT (Drew's fair test): GLM's correct bodies reason about KNOWN gcc mechanics (delay slots, callee-saved $s0, reload-after-call aliasing, switch jump tables) — cookbook §10/§17/jump-table. NO new idiom. The quirk space is largely mapped (22 phases of Opus-Max mining). Well DRY confirmed from BOTH angles: failed-residual (T10.8) AND fresh-hand-solve (T10.9). --- src/ov_SC02_005/ov_SC02_005.c | 28 +++++++++++++++++++++++++++- src/ov_SC03_001/ov_SC03_001.c | 20 +++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/ov_SC02_005/ov_SC02_005.c b/src/ov_SC02_005/ov_SC02_005.c index 9eba938e9..19bc25fd7 100644 --- a/src/ov_SC02_005/ov_SC02_005.c +++ b/src/ov_SC02_005/ov_SC02_005.c @@ -2924,7 +2924,33 @@ DEFINE_func_8015EE44() /* dedup: shared engine-core @0x8015EE44 (src/shared) */ INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005", func_8015EE7C); -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005", func_8015EEE0); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void*); +extern void func_80161418(void *a0); +extern s32 func_801725A4(u8 *a0); +extern void (*D_80192F7C[])(void*); + +void func_8015EEE0(void* arg0) { + ((void (*)(void*, u32))func_80148038)(arg0, 0x10000); + ((void (*)(void*))func_80147460)(arg0); + ((void (*)(void*, s32, s32, s32))func_80147AD4)(arg0, 0, 0, 0x1000); + ((void (*)(void*))func_801473EC)(arg0); + + if (*(u16*)((u8*)arg0 + 0xB8) & 0x8000) { + D_80192F7C[*(u16*)arg0](arg0); + ((void (*)(void*, s32))func_80147078)(arg0, 0); + func_80159B70(arg0); + } else { + if (!((s32 (*)(void*))func_80161418)(arg0)) { + ((void (*)(void*))func_801725A4)(arg0); + } + } +} + DEFINE_func_8015EF9C() /* dedup: shared engine-core @0x8015EF9C (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001.c b/src/ov_SC03_001/ov_SC03_001.c index d149740d0..057c78f70 100644 --- a/src/ov_SC03_001/ov_SC03_001.c +++ b/src/ov_SC03_001/ov_SC03_001.c @@ -4808,7 +4808,25 @@ INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001", func_8017DCE4); INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001", func_8017DDEC); -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001", func_8017DE28); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32, s32); +extern u32 D_8019105C; + +void func_8017DE28(s32 arg0) { + s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); + *(s32*)((u8*)arg0 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(arg0); + } else { + func_8001C214(v0, 0); + *(s16*)((u8*)arg0 + 0x2) = 1; + *(s16*)((u8*)arg0 + 0x5C) = 0x20; + *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8019105C | 0x40000000; + *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); + } +} + DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */