diff --git a/config/overlays.mk b/config/overlays.mk index 2355c13cdd..e2037b4473 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -146,6 +146,7 @@ build/src/ov_SC01_000/ov_SC01_000_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads ( build/src/ov_SC01_000/ov_SC01_000_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 build/src/ov_SC01_000/ov_SC01_000_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_000/ov_SC01_000_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 +build/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 ov_SC01_000_CHECK_SHA := config/check.ov_SC01_000.sha ov_SC01_000_SYMBOLS := config/symbols.ov_SC01_000.txt ov_SC01_000_SIG := .run/sig.ov_SC01_000.jsonl @@ -175,6 +176,7 @@ build/src/ov_SC01_001/ov_SC01_001_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads ( build/src/ov_SC01_001/ov_SC01_001_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 build/src/ov_SC01_001/ov_SC01_001_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_001/ov_SC01_001_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 +build/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 ov_SC01_001_CHECK_SHA := config/check.ov_SC01_001.sha ov_SC01_001_SYMBOLS := config/symbols.ov_SC01_001.txt ov_SC01_001_SIG := .run/sig.ov_SC01_001.jsonl @@ -494,6 +496,7 @@ build/src/ov_SC01_004/ov_SC01_004_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads ( build/src/ov_SC01_004/ov_SC01_004_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 build/src/ov_SC01_004/ov_SC01_004_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_004/ov_SC01_004_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 +build/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 ov_SC01_004_CHECK_SHA := config/check.ov_SC01_004.sha ov_SC01_004_SYMBOLS := config/symbols.ov_SC01_004.txt ov_SC01_004_SIG := .run/sig.ov_SC01_004.jsonl diff --git a/config/splat.ov_SC01_000.yaml b/config/splat.ov_SC01_000.yaml index c0a8595afd..6b8991b512 100644 --- a/config/splat.ov_SC01_000.yaml +++ b/config/splat.ov_SC01_000.yaml @@ -149,7 +149,7 @@ segments: - [0x7bce0, .rodata, ov_SC01_000_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bcfc, data, tail15] - [0x7bd14, .rodata, ov_SC01_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bd34, data, tail16] + - [0x7bd54, data, tail16] - [0x7bdb4, .rodata, ov_SC01_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bdc8, data, tail17] - [0x7bf70, .rodata, ov_SC01_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) diff --git a/config/splat.ov_SC01_001.yaml b/config/splat.ov_SC01_001.yaml index 9718349f38..6b7e393026 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -150,7 +150,7 @@ segments: - [0xc3db8, .rodata, ov_SC01_001_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3dd4, data, tail15] - [0xc3dec, .rodata, ov_SC01_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3e0c, data, tail16] + - [0xc3e2c, data, tail16] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3ea0, data, tail17] - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) diff --git a/config/splat.ov_SC01_004.yaml b/config/splat.ov_SC01_004.yaml index fba03d909f..925689fd45 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -149,7 +149,7 @@ segments: - [0x66198, .rodata, ov_SC01_004_jr_8015C32C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x661b4, data, tail15] - [0x661cc, .rodata, ov_SC01_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x661ec, data, tail16] + - [0x6620c, data, tail16] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66280, data, tail17] - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) 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 da6e3a9e51..0be67ff098 100644 --- a/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c +++ b/src/ov_SC01_000/ov_SC01_000_jr_8016AB6C.c @@ -2013,7 +2013,57 @@ lout: } -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8016AB6C", func_8016AE5C); + +extern void func_8016B234(); +extern void func_800D22E4(s32 a0); + +void func_8016AE5C(s32 param_1) { + s32 sp; + + sp = *(s32 *)(param_1 + 0x20); + if (*(u32 *)(param_1 + 0x2C) < 6) { + func_8016B234(); + } + switch (*(u32 *)(param_1 + 0x2C)) { + case 0: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) != 0) { + if ((*(s32 *)(param_1 + 0x1C) & 3) == 1) { + *(s16 *)(param_1 + 0x26) += 1; + } + return; + } + *(s16 *)(param_1 + 0x24) = 0xFF; + *(s32 *)(param_1 + 0x1C) = 8; + *(s16 *)(param_1 + 2) += 1; + return; + case 1: + case 5: + func_800D22E4(param_1); + *(s32 *)(param_1 + 0x14) += 0x18000; + case 2: + case 3: + case 4: + case 6: + case 7: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) == 0) { + if (*(u32 *)(param_1 + 0x2C) < 6) { + *(s16 *)(param_1 + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 8; + } else { + *(u8 *)(sp + 0x26) = 0xC0; + *(u8 *)(sp + 0x25) = 0xC0; + *(u8 *)(sp + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 0xC; + } + *(s16 *)(param_1 + 2) += 1; + } + break; + } +} DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (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 d02278f677..af00e3a569 100644 --- a/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c +++ b/src/ov_SC01_001/ov_SC01_001_jr_8016AB6C.c @@ -2011,7 +2011,57 @@ lout: } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8016AB6C", func_8016AE5C); + +extern void func_8016B234(); +extern void func_800D22E4(s32 a0); + +void func_8016AE5C(s32 param_1) { + s32 sp; + + sp = *(s32 *)(param_1 + 0x20); + if (*(u32 *)(param_1 + 0x2C) < 6) { + func_8016B234(); + } + switch (*(u32 *)(param_1 + 0x2C)) { + case 0: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) != 0) { + if ((*(s32 *)(param_1 + 0x1C) & 3) == 1) { + *(s16 *)(param_1 + 0x26) += 1; + } + return; + } + *(s16 *)(param_1 + 0x24) = 0xFF; + *(s32 *)(param_1 + 0x1C) = 8; + *(s16 *)(param_1 + 2) += 1; + return; + case 1: + case 5: + func_800D22E4(param_1); + *(s32 *)(param_1 + 0x14) += 0x18000; + case 2: + case 3: + case 4: + case 6: + case 7: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) == 0) { + if (*(u32 *)(param_1 + 0x2C) < 6) { + *(s16 *)(param_1 + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 8; + } else { + *(u8 *)(sp + 0x26) = 0xC0; + *(u8 *)(sp + 0x25) = 0xC0; + *(u8 *)(sp + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 0xC; + } + *(s16 *)(param_1 + 2) += 1; + } + break; + } +} DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (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 f60e38d0cb..e4d8b03761 100644 --- a/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c +++ b/src/ov_SC01_004/ov_SC01_004_jr_8016AB6C.c @@ -2011,7 +2011,57 @@ lout: } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8016AB6C", func_8016AE5C); + +extern void func_8016B234(); +extern void func_800D22E4(s32 a0); + +void func_8016AE5C(s32 param_1) { + s32 sp; + + sp = *(s32 *)(param_1 + 0x20); + if (*(u32 *)(param_1 + 0x2C) < 6) { + func_8016B234(); + } + switch (*(u32 *)(param_1 + 0x2C)) { + case 0: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) != 0) { + if ((*(s32 *)(param_1 + 0x1C) & 3) == 1) { + *(s16 *)(param_1 + 0x26) += 1; + } + return; + } + *(s16 *)(param_1 + 0x24) = 0xFF; + *(s32 *)(param_1 + 0x1C) = 8; + *(s16 *)(param_1 + 2) += 1; + return; + case 1: + case 5: + func_800D22E4(param_1); + *(s32 *)(param_1 + 0x14) += 0x18000; + case 2: + case 3: + case 4: + case 6: + case 7: + *(s16 *)(param_1 + 0xA) -= *(s32 *)(param_1 + 0x1C); + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + if (*(s32 *)(param_1 + 0x1C) == 0) { + if (*(u32 *)(param_1 + 0x2C) < 6) { + *(s16 *)(param_1 + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 8; + } else { + *(u8 *)(sp + 0x26) = 0xC0; + *(u8 *)(sp + 0x25) = 0xC0; + *(u8 *)(sp + 0x24) = 0xC0; + *(s32 *)(param_1 + 0x1C) = 0xC; + } + *(s16 *)(param_1 + 2) += 1; + } + break; + } +} DEFINE_func_8016AFB0() /* dedup: shared engine-core @0x8016AFB0 (src/shared) */