diff --git a/config/overlays.mk b/config/overlays.mk index adfc65daf..ae2b47799 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -1983,7 +1983,7 @@ ov_SC03_094_ELF := $(ov_SC03_094_OUT).elf ov_SC03_094_MAPFILE := $(ov_SC03_094_OUT).map ov_SC03_094_LD_SCRIPT := $(ov_SC03_094_OUT).ld ov_SC03_094_SPLAT_YAML := config/splat.ov_SC03_094.yaml -ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,ov_SC03_094_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_80135888.o,tail3.data.o,ov_SC03_094_jr_80135A4C.o,tail4.data.o,ov_SC03_094_jr_80135D20.o,tail5.data.o,ov_SC03_094_jr_801380E0.o,ov_SC03_094_o0c.o,tail6.data.o,ov_SC03_094_jr_8013F350.o,tail7.data.o,ov_SC03_094_jr_8013FFD8.o,tail8.data.o,ov_SC03_094_jr_80140608.o,tail9.data.o,ov_SC03_094_jr_8015444C.o,ov_SC03_094_jr_80154C24.o,ov_SC03_094_jr_801588CC.o,ov_SC03_094_jr_80159C84.o,tail10.data.o,ov_SC03_094_jr_8015A3C8.o,tail11.data.o,ov_SC03_094_jr_8015AE2C.o,tail12.data.o,ov_SC03_094_jr_8015C32C.o,tail13.data.o,ov_SC03_094_jr_8016AB6C.o,tail14.data.o,ov_SC03_094_jr_80171B4C.o,ov_SC03_094_jr_801734BC.o,tail15.data.o,ov_SC03_094_jr_801789AC.o,ov_SC03_094_jr_80178D40.o,tail16.data.o,ov_SC03_094_jr_8017A4AC.o,tail17.data.o,ov_SC03_094_jr_8017AE2C.o,ov_SC03_094_jr_8017BEBC.o,tail18.data.o,ov_SC03_094_jr_8018501C.o,ov_SC03_094_jr_801873D8.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,ov_SC03_094_jr_8012ACE0.o,tail2.data.o,ov_SC03_094_jr_80135888.o,tail3.data.o,ov_SC03_094_jr_80135A4C.o,tail4.data.o,ov_SC03_094_jr_80135D20.o,tail5.data.o,ov_SC03_094_jr_801380E0.o,ov_SC03_094_o0c.o,tail6.data.o,ov_SC03_094_jr_8013F350.o,tail7.data.o,ov_SC03_094_jr_8013FFD8.o,tail8.data.o,ov_SC03_094_jr_80140608.o,tail9.data.o,ov_SC03_094_jr_8015444C.o,ov_SC03_094_jr_80154C24.o,ov_SC03_094_jr_801588CC.o,ov_SC03_094_jr_80159C84.o,tail10.data.o,ov_SC03_094_jr_8015A3C8.o,tail11.data.o,ov_SC03_094_jr_8015AE2C.o,tail12.data.o,ov_SC03_094_jr_8015C32C.o,tail13.data.o,ov_SC03_094_jr_8016AB6C.o,tail14.data.o,ov_SC03_094_jr_80171B4C.o,ov_SC03_094_jr_801734BC.o,tail15.data.o,ov_SC03_094_jr_801789AC.o,ov_SC03_094_jr_80178D40.o,tail16.data.o,ov_SC03_094_jr_8017A4AC.o,tail17.data.o,ov_SC03_094_jr_8017AE2C.o,ov_SC03_094_jr_8017BEBC.o,ov_SC03_094_jr_8018501C.o,ov_SC03_094_jr_801873D8.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_094/ov_SC03_094.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC03_094/ov_SC03_094_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC03_094/ov_SC03_094_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -1996,7 +1996,7 @@ build/src/ov_SC03_094/ov_SC03_094_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC03_094/ov_SC03_094_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_094/ov_SC03_094_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC03_094/ov_SC03_094_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 -build/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38 +build/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.o: JTBL_PADS := 0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x4c build/src/ov_SC03_094/ov_SC03_094_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC03_094_CHECK_SHA := config/check.ov_SC03_094.sha ov_SC03_094_SYMBOLS := config/symbols.ov_SC03_094.txt diff --git a/config/splat.ov_SC03_094.yaml b/config/splat.ov_SC03_094.yaml index 32842a4aa..380d15614 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -165,10 +165,9 @@ segments: - [0xa9bdc, data, tail17] - [0xa9be0, .rodata, ov_SC03_094_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9bf4, .rodata, ov_SC03_094_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9c40, data, tail18] - [0xa9c58, .rodata, ov_SC03_094_jr_8018501C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9c70, .rodata, ov_SC03_094_jr_801873D8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9c84, data, tail19] + - [0xa9c84, data, tail18] - [0xAB13C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAB13F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c b/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c index b7542fe43..d89347c1e 100644 --- a/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c +++ b/src/ov_SC03_094/ov_SC03_094_jr_8017BEBC.c @@ -6097,7 +6097,188 @@ INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_80183CC INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_80183D68); -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_80183E70); + +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 rand(void); + +void func_80183E70(s32 a0, s32 a1) { + s32 p; + s32 i; + s32 t; + + switch (a1) { + case 0: + i = 0; + do { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s32 *)(p + 0x10) = func_8004787C(i) << 8; + *(s32 *)(p + 0x18) = func_80047948(i) << 8; + *(u16 *)(p + 0xA) += 0x60; + } + i += 0x200; + } while (i < 0x1000); + break; + + case 1: + i = 0; + do { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s32 *)(p + 0x10) = func_8004787C(i) << 8; + *(s32 *)(p + 0x14) = func_80047948(i) << 8; + *(u16 *)(p + 0xE) += 0x60; + } + i += 0x200; + } while (i < 0x1000); + break; + + case 2: + i = 0; + do { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s32 *)(p + 0x10) = func_8004787C(i) << 8; + *(s32 *)(p + 0x14) = func_80047948(i) << 8; + *(u16 *)(p + 0xE) -= 0x60; + } + i += 0x200; + } while (i < 0x1000); + break; + + case 3: + i = 0; + do { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s32 *)(p + 0x14) = func_8004787C(i) << 8; + *(s32 *)(p + 0x18) = func_80047948(i) << 8; + *(u16 *)(p + 0x6) += 0x60; + } + i += 0x200; + } while (i < 0x1000); + break; + + case 4: + i = 0; + do { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s32 *)(p + 0x14) = func_8004787C(i) << 8; + *(s32 *)(p + 0x18) = func_80047948(i) << 8; + *(u16 *)(p + 0x6) -= 0x60; + } + i += 0x200; + } while (i < 0x1000); + break; + + case 5: + t = *(s16 *)(a0 + 0xFC); + if (t == 1) { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x12) = 0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0xE) += 0x30; + *(u16 *)(p + 0x6) += rand() & 0x3F; + } + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x12) = -0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0xE) += 0x30; + *(u16 *)(p + 0x6) -= rand() & 0x3F; + } + } else if (t == 2) { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x12) = 0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0xE) -= 0x30; + *(u16 *)(p + 0x6) += rand() & 0x3F; + } + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x12) = -0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0xE) -= 0x30; + *(u16 *)(p + 0x6) -= rand() & 0x3F; + } + } else if (t == 3) { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x1A) = 0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0x6) += 0x30; + *(u16 *)(p + 0xE) += rand() & 0x3F; + } + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x1A) = -0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0x6) += 0x30; + *(u16 *)(p + 0xE) -= rand() & 0x3F; + } + } else if (t == 4) { + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x1A) = 0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0x6) -= 0x30; + *(u16 *)(p + 0xE) += rand() & 0x3F; + } + p = func_80132EF4(a0, 0x40); + if (p != 0) { + *(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1A) = 0x7000; + *(s16 *)(*(s32 *)(p + 0x20) + 0x1C) = 0x7000; + *(s16 *)(p + 0x1A) = -0x10; + *(u16 *)(p + 0xA) += 0x60; + *(u16 *)(p + 0x6) -= 0x30; + *(u16 *)(p + 0xE) -= rand() & 0x3F; + } + } + break; + } +} INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8017BEBC", func_801844C8);