feat(decomp): ov_SC03_015 — 7 resolver-held drafts banked after the T2a surgery (func_8017C104, func_8017D890, func_8017DCC0, func_80180638, func_80180CF8, func_80188FB4, func_801893BC); gate-time §8a carve (yaml+mk) re-verified byte-identical from a clean rebuild; T2a log (P31 S62)

This commit is contained in:
Drew T
2026-08-26 14:11:20 -06:00
parent 5a87e741ea
commit c50e9578ba
6 changed files with 180 additions and 9 deletions
+2 -1
View File
@@ -1590,7 +1590,8 @@ build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC03_015/ov_SC03_015_jr_80185B44.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38 (S62 T2a: order re-aligned to the yaml after the 17:43 mk restore)
build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_015/ov_SC03_015_jr_80185B44.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38
build/src/ov_SC03_015/ov_SC03_015_o0e.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC03_015_CHECK_SHA := config/check.ov_SC03_015.sha
ov_SC03_015_SYMBOLS := config/symbols.ov_SC03_015.txt
+1 -1
View File
@@ -168,7 +168,7 @@ segments:
- [0xc10e0, .rodata, ov_SC03_015_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc116c, data, tail17]
- [0xc1170, .rodata, ov_SC03_015_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1184, data, tail18]
- [0xc1198, data, tail18]
- [0xc11b0, .rodata, ov_SC03_015_jr_8017EB7C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc11d0, data, tail19]
- [0xc1308, .rodata, ov_SC03_015_jr_80184F14] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+13
View File
@@ -2299,3 +2299,16 @@ HEAD commit:3078).
targets — re-judge the 54 carve-refused under the new comparer before the carver spends builds.
**NEXT: T2a** — red surgery ov_SC03_015 (Max, solo).
**T2a DONE (ov_SC03_015 GREEN, red 5 → 4, +7 banks).** Two defects, one cause: the 17:43 (08-25)
"RESTORE overlays.mk" blanket-restore resurrected the 06:58-era `_JTBL_INTERLEAVE` order (data
`tail20` wedged BETWEEN the jr_80184F14 and jr_80185B44 carves + a phantom `tail21`) after wave de
(11:17) had merged the carves in the yaml → `make extract` died (`tail21.data.o` not found) and no
JTBL_PADS value could ever win the S61 search (the order was wrong, not the pads). Retail words at
0xc1308–0xc139c read as 12 | 8 | 6 | 11 entries: jr_80184F14's table, then jr_80185B44's three
(func_80185B44 / func_801874C0 / func_80187884) — exactly the 3 `.align 3` tables the TU now emits.
Fix: order re-aligned to the yaml, pads `0,0,0` (`commit:3084`); R22 clean rebuild byte-identical
(`d84b01a2`); then the 7 resolver drafts it held gated 7/7 (the gate's own §8a carve for the new
switch fns updated yaml+mk; re-verified clean). Lesson for R59: a blanket restore of overlays.mk
must be diffed against every yaml it describes (order ⇔ subseg sequence) — `tools/`-worthy check.
**NEXT: T2b** — ov_SC03_024 (+4 rodata shift in jr_8017AE2C.o; Max, solo).
+64 -3
View File
@@ -3392,7 +3392,23 @@ void func_8017C0C8(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017AE2C", func_8017C104);
void func_8017C104(a0)
u8 *a0;
{
s32 frame_pad[10];
u16 v1;
u16 v0;
(void)&frame_pad;
v1 = *(u16 *)(a0 + 0x2);
v0 = *(u16 *)(a0 + 0xE);
v1 += 0x1;
v0 += 0x10;
*(u16 *)(a0 + 0xE) = v0;
*(u16 *)(a0 + 0x2) = v1;
}
extern void func_8017C154();
void func_8017C12C(void) {
@@ -4432,7 +4448,30 @@ void func_8017D804(s32 param) {
}
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017AE2C", func_8017D890);
extern u8 D_801EA884;
extern u8 D_801EA885;
extern u8 D_801EA886;
void func_8017D890(arg0, a1)
void *arg0;
void *a1;
{
s16 var;
a1 = *(void **)((s32)arg0 + 0x20);
var = *(u16 *)((s32)a1 + 0x1A) + 0x200;
*(u16 *)((s32)a1 + 0x1A) = var;
*(u16 *)((s32)a1 + 0x18) = var;
if (var >= 0x1001) {
D_801EA884 = 0xFF;
D_801EA885 = 0xFF;
D_801EA886 = 0xFF;
*(u16 *)((s32)a1 + 0x1A) = 0x1000;
*(u16 *)((s32)a1 + 0x18) = 0x1000;
*(u16 *)((s32)arg0 + 2) = *(u16 *)((s32)arg0 + 2) + 1;
}
}
/* func_8017D900 — fade the 4-byte colour quad at D_801EA880 one step toward 0
@@ -4585,7 +4624,29 @@ void func_8017DC28(void *a0) {
DEFINE_func_8017DC4C() /* dedup: shared engine-core @0x8017DC4C (src/shared) */
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017AE2C", func_8017DCC0);
extern s16 D_80126B3A;
extern s16 D_80126B3C;
extern void func_80171A1C(u8 *a0);
extern void func_8017C624(void *a0, s32 a1, s32 a2);
void func_8017DCC0(a0)
u8 *a0;
{
s32 v;
if (*(u16 *)(a0 + 0xB8) & 0x8000) {
switch ((s16)(*(u16 *)&D_80126B3A - 2)) {
case 0: v = 0; break;
case 1: v = 1; break;
case 2: v = 2; break;
case 3: v = 3; break;
case 4: v = 4; break;
}
D_80126B3C = v;
func_8017C624(a0, -0x60, v);
func_80171A1C(a0);
}
}
DEFINE_func_8017DD74() /* dedup: shared engine-core @0x8017DD74 (src/shared) */
+47 -2
View File
@@ -3611,7 +3611,21 @@ DEFINE_func_801805BC() /* dedup: shared engine-core @0x801805BC (src/shared) */
DEFINE_func_801805F8() /* dedup: shared engine-core @0x801805F8 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017EB7C", func_80180638);
extern s32 func_80171990(u8 *a0);
extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8);
extern void func_80147324(s32 arg0);
void func_80180638(arg0)
void *arg0;
{
if (*(u16 *)((s32)arg0 + 0xB8) & 0x4000) {
*(s32 *)((s32)arg0 + 0x44) |= 0x20000;
func_801466F0(0x16, (s32)arg0, 0, -0x80, -0x10, 0, 0, 0);
func_80147324(0x7BC);
func_80171990((u8 *)arg0);
}
}
extern s32 func_8014C088(s32 a0, s32 a1);
extern s32 func_8014CB58(void);
@@ -3871,7 +3885,38 @@ void func_80180C34(s32 p) {
}
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8017EB7C", func_80180CF8);
extern s32 func_80146E98(s32 a0);
extern void func_80162CCC(void);
void func_80180CF8(arg0)
s32 arg0;
{
s32 tbl;
s32 obj;
u16 t1;
u16 t2;
tbl = *(s32 *)(arg0 + 0x4C);
obj = *(s32 *)(arg0 + 0x20);
if (func_80146E98(arg0) != 0) {
t1 = *(u16 *)(obj + 0x1C) + 0x400;
*(s16 *)(obj + 0x1C) = t1;
*(s16 *)(obj + 0x18) = t1;
if ((s16)t1 >= 0x7001) {
*(s16 *)(obj + 0x1C) = 0x7000;
*(s16 *)(obj + 0x18) = 0x7000;
}
t2 = *(u16 *)(obj + 0x1A) + 0x100;
*(s16 *)(obj + 0x1A) = t2;
if ((s16)t2 >= 0x7001) {
*(s16 *)(obj + 0x1A) = 0x7000;
}
}
if (*(u16 *)tbl != 0x16) {
((void (*)(s32))func_80162CCC)(arg0);
}
}
+53 -2
View File
@@ -4207,7 +4207,41 @@ void func_80188F28(s32 a0) {
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80185B44", func_80188F80);
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80185B44", func_80188FB4);
int func_80188FB4(int a0, void* a1)
{
s16 stack_buf[8];
register s16 *s0 __asm__("$16") = (s16 *)a1;
s16 v0;
s32 result;
s32 ret;
v0 = s0[2];
stack_buf[0] = v0;
v0 = s0[3];
stack_buf[4] = v0;
v0 = s0[5];
stack_buf[5] = v0;
stack_buf[1] = v0;
v0 = s0[6];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80189050((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
if (result != 0) {
ret = 1;
} else {
v0 = s0[7];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80189050((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
ret = (result != 0);
}
return ret;
}
extern s32 *D_80126B78;
extern s32 *D_80126B90;
@@ -4324,7 +4358,24 @@ DEFINE_func_801892E4() /* dedup: shared engine-core @0x801892E4 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80185B44", func_80189310);
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_80185B44", func_801893BC);
extern int func_80178970(void);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
void func_801893BC(a0)
s32 a0;
{
if (func_8012BEE8(a0) == 0) {
if ((*(s32 *)(a0 + 0x1C) & 3) == 0) {
func_8012C658(0x2b4, 1, a0);
}
}
if (*(s16 *)(a0 + 0x98) == 0) {
func_80188C0C(a0);
}
((s32 (*)(s32))func_80178970)(a0);
}
DEFINE_func_8018942C() /* dedup: shared engine-core @0x8018942C (src/shared) */