From 46a2bf56af1c5abd953d26176102bcc609ff3a54 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 12 Aug 2026 18:28:00 -0600 Subject: [PATCH] feat(phase-30 S48-T6): propagate func_80181948 to its zero-crack siblings --- config/overlays.mk | 4 +- config/splat.ov_SC02_000.yaml | 2 +- config/splat.ov_SC02_003.yaml | 2 +- src/ov_SC02_000/ov_SC02_000_jr_8017EA84.c | 95 ++++++++++++++++++++++- src/ov_SC02_003/ov_SC02_003_jr_8017EA84.c | 95 ++++++++++++++++++++++- 5 files changed, 192 insertions(+), 6 deletions(-) diff --git a/config/overlays.mk b/config/overlays.mk index f34dc74aea..d54e5e7ced 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -253,7 +253,7 @@ build/src/ov_SC02_000/ov_SC02_000_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC02_000/ov_SC02_000_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 build/src/ov_SC02_000/ov_SC02_000_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x54,+0x74 -build/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.o: JTBL_PADS := 0,4,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x38,+0x58 +build/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.o: JTBL_PADS := 0,4,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x38,+0x58,+0x78 build/src/ov_SC02_000/ov_SC02_000_jr_8017FCB0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_801808C4.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_000/ov_SC02_000_jr_80180D6C.o: JTBL_PADS := 0,0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60,+0x80,+0xa0 @@ -293,7 +293,7 @@ build/src/ov_SC02_003/ov_SC02_003_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC02_003/ov_SC02_003_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 build/src/ov_SC02_003/ov_SC02_003_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x54,+0x74 -build/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.o: JTBL_PADS := 0,4,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x38,+0x58 +build/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.o: JTBL_PADS := 0,4,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x38,+0x58,+0x78 build/src/ov_SC02_003/ov_SC02_003_jr_8017FCB0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_801808C4.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_003/ov_SC02_003_jr_80180D6C.o: JTBL_PADS := 0,0,0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x40,+0x60,+0x80,+0xa0 diff --git a/config/splat.ov_SC02_000.yaml b/config/splat.ov_SC02_000.yaml index 33bc268061..6fc66ecaae 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -170,7 +170,7 @@ segments: - [0xbe764, data, tail17] - [0xbe768, .rodata, ov_SC02_000_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe7fc, .rodata, ov_SC02_000_jr_8017EA84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe874, data, tail18] + - [0xbe894, data, tail18] - [0xbe924, .rodata, ov_SC02_000_jr_8017FB24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe984, data, tail19] diff --git a/config/splat.ov_SC02_003.yaml b/config/splat.ov_SC02_003.yaml index b123bededa..1ae6e3e6f7 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -170,7 +170,7 @@ segments: - [0xbe764, data, tail17] - [0xbe768, .rodata, ov_SC02_003_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe7fc, .rodata, ov_SC02_003_jr_8017EA84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe874, data, tail18] + - [0xbe894, data, tail18] - [0xbe924, .rodata, ov_SC02_003_jr_8017FB24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbe984, data, tail19] diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.c b/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.c index 9d45c0f2d7..2f9f1ae80f 100644 --- a/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.c +++ b/src/ov_SC02_000/ov_SC02_000_jr_8017EA84.c @@ -3237,7 +3237,100 @@ void func_8017EA84(s32 a0) } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8017EA84", func_8017F390); + +extern u16 D_80126B66; +extern s32 D_801270C8; +extern s32 D_801270CC; +extern s32 D_801E8008; +extern char D_801A6534[]; +extern char D_801A7054[]; +extern char D_8018E6B0[]; + +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBA4(s32 a0); +extern void func_8012C098(void *a0); +extern void func_8012C218(void *a0); + +void func_8017F390(s32 a0) +{ + u16 state; + u16 t; + s32 v0; + + state = *(u16 *)(a0 + 0x34); + switch (state) { + case 0: + v0 = (s32) *(s16 *)&D_80126B66 - (s32) *(s16 *)(a0 + 0xE); + if (v0 < 0) { + v0 = -v0; + } + if (v0 < 0x171) { + t = state + 1; + *(u16 *)(a0 + 0x34) = t; + func_8012A828(a0, &D_801A7054); + *(s32 *)(a0 + 0x1C) = 0x1E; + } + return; + + case 1: + if (*(s32 *)(a0 + 0x1C) == 0x14) { + D_801270C8 = 1; + } + if (func_8012BEE8(a0) == 0) { + return; + } + t = *(u16 *)(a0 + 0x34) + 1; + *(u16 *)(a0 + 0x34) = t; + func_8012A828(a0, &D_801A6534); + *(s32 *)(a0 + 0x1C) = 0; + return; + + case 2: + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + { + s32 p20 = *(s32 *)(a0 + 0x20); + v0 = func_8012B608(*(s16 *)(p20 + 0x12), 0x800, 4); + } + { + s32 p20b = *(s32 *)(a0 + 0x20); + *(u16 *)(p20b + 0x12) = *(u16 *)(p20b + 0x12) + v0; + } + if (*(s32 *)(a0 + 0x1C) >= 8) { + func_8012B14C(a0, (s32) D_8018E6B0); + v0 = ((s32 (*)(s32)) func_8012CBA4)(a0); + D_801E8008 = v0; + if (v0 == 0 || (v0 & 0x4000) != 0) { + *(s32 *)(a0 + 4) = *(s32 *)(a0 + 0x38); + *(s32 *)(a0 + 8) = *(s32 *)(a0 + 0x3C); + *(s32 *)(a0 + 0xC) = *(s32 *)(a0 + 0x40); + } + } + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + if (*(s32 *)(a0 + 0x1C) >= 0x100) { + switch ((s32)((u32)*(u16 *)(a0 + 0x70) << 0x10) >> 0x18) { + case 0: + case 1: + case 2: + case 5: + case 6: + func_8012C098((void *)a0); + return; + case 3: + case 7: + func_8012C218((void *)a0); + break; + case 4: + D_801270CC = D_801270CC - 1; + func_8012C218((void *)a0); + break; + } + } + return; + } +} // @class: plumbing diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.c b/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.c index 950df6bd48..b61e3f8ddf 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8017EA84.c @@ -3237,7 +3237,100 @@ void func_8017EA84(s32 a0) } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8017EA84", func_8017F390); + +extern u16 D_80126B66; +extern s32 D_801270C8; +extern s32 D_801270CC; +extern s32 D_801E8008; +extern char D_801A6534[]; +extern char D_801A7054[]; +extern char D_8018E6B0[]; + +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBA4(s32 a0); +extern void func_8012C098(void *a0); +extern void func_8012C218(void *a0); + +void func_8017F390(s32 a0) +{ + u16 state; + u16 t; + s32 v0; + + state = *(u16 *)(a0 + 0x34); + switch (state) { + case 0: + v0 = (s32) *(s16 *)&D_80126B66 - (s32) *(s16 *)(a0 + 0xE); + if (v0 < 0) { + v0 = -v0; + } + if (v0 < 0x171) { + t = state + 1; + *(u16 *)(a0 + 0x34) = t; + func_8012A828(a0, &D_801A7054); + *(s32 *)(a0 + 0x1C) = 0x1E; + } + return; + + case 1: + if (*(s32 *)(a0 + 0x1C) == 0x14) { + D_801270C8 = 1; + } + if (func_8012BEE8(a0) == 0) { + return; + } + t = *(u16 *)(a0 + 0x34) + 1; + *(u16 *)(a0 + 0x34) = t; + func_8012A828(a0, &D_801A6534); + *(s32 *)(a0 + 0x1C) = 0; + return; + + case 2: + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + { + s32 p20 = *(s32 *)(a0 + 0x20); + v0 = func_8012B608(*(s16 *)(p20 + 0x12), 0x800, 4); + } + { + s32 p20b = *(s32 *)(a0 + 0x20); + *(u16 *)(p20b + 0x12) = *(u16 *)(p20b + 0x12) + v0; + } + if (*(s32 *)(a0 + 0x1C) >= 8) { + func_8012B14C(a0, (s32) D_8018E6B0); + v0 = ((s32 (*)(s32)) func_8012CBA4)(a0); + D_801E8008 = v0; + if (v0 == 0 || (v0 & 0x4000) != 0) { + *(s32 *)(a0 + 4) = *(s32 *)(a0 + 0x38); + *(s32 *)(a0 + 8) = *(s32 *)(a0 + 0x3C); + *(s32 *)(a0 + 0xC) = *(s32 *)(a0 + 0x40); + } + } + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + if (*(s32 *)(a0 + 0x1C) >= 0x100) { + switch ((s32)((u32)*(u16 *)(a0 + 0x70) << 0x10) >> 0x18) { + case 0: + case 1: + case 2: + case 5: + case 6: + func_8012C098((void *)a0); + return; + case 3: + case 7: + func_8012C218((void *)a0); + break; + case 4: + D_801270CC = D_801270CC - 1; + func_8012C218((void *)a0); + break; + } + } + return; + } +} // @class: plumbing