mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 15:43:06 -04:00
feat(phase-30 S48-0b): jtbl family func_8015A3C8 — 3/3 blocked-binary siblings banked
This commit is contained in:
+5
-4
@@ -4915,8 +4915,8 @@ ov_MAIN_012_ELF := $(ov_MAIN_012_OUT).elf
|
||||
ov_MAIN_012_MAPFILE := $(ov_MAIN_012_OUT).map
|
||||
ov_MAIN_012_LD_SCRIPT := $(ov_MAIN_012_OUT).ld
|
||||
ov_MAIN_012_SPLAT_YAML := config/splat.ov_MAIN_012.yaml
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012.o,tail2.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_MAIN_012/ov_MAIN_012.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
|
||||
ov_MAIN_012_JTBL_INTERLEAVE := --order tail.data.o,ov_MAIN_012_jr_8015A3C8.o,tail2.data.o,ov_MAIN_012_jr_801789AC.o,tail3.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_MAIN_012/ov_MAIN_012_jr_801789AC.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
|
||||
ov_MAIN_012_CHECK_SHA := config/check.ov_MAIN_012.sha
|
||||
ov_MAIN_012_SYMBOLS := config/symbols.ov_MAIN_012.txt
|
||||
ov_MAIN_012_SIG := .run/sig.ov_MAIN_012.jsonl
|
||||
@@ -4939,6 +4939,7 @@ ov_SC02_037_MAPFILE := $(ov_SC02_037_OUT).map
|
||||
ov_SC02_037_LD_SCRIPT := $(ov_SC02_037_OUT).ld
|
||||
ov_SC02_037_SPLAT_YAML := config/splat.ov_SC02_037.yaml
|
||||
ov_SC02_037_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_037.o,tail2.data.o,ov_SC02_037_jr_801789AC.o,tail3.data.o,ov_SC02_037_jr_8017AE2C.o,tail4.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC02_037/ov_SC02_037.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC02_037/ov_SC02_037_jr_8017AE2C.o: JTBL_PADS := 0,0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x34,+0x4c
|
||||
ov_SC02_037_CHECK_SHA := config/check.ov_SC02_037.sha
|
||||
ov_SC02_037_SYMBOLS := config/symbols.ov_SC02_037.txt
|
||||
@@ -4961,8 +4962,8 @@ ov_SC03_107_ELF := $(ov_SC03_107_OUT).elf
|
||||
ov_SC03_107_MAPFILE := $(ov_SC03_107_OUT).map
|
||||
ov_SC03_107_LD_SCRIPT := $(ov_SC03_107_OUT).ld
|
||||
ov_SC03_107_SPLAT_YAML := config/splat.ov_SC03_107.yaml
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107.o,tail2.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC03_107/ov_SC03_107.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
|
||||
ov_SC03_107_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_107_jr_8015A3C8.o,tail2.data.o,ov_SC03_107_jr_801789AC.o,tail3.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC03_107/ov_SC03_107_jr_801789AC.o: JTBL_PADS := 0,0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0x190,+0x220
|
||||
ov_SC03_107_CHECK_SHA := config/check.ov_SC03_107.sha
|
||||
ov_SC03_107_SYMBOLS := config/symbols.ov_SC03_107.txt
|
||||
ov_SC03_107_SIG := .run/sig.ov_SC03_107.jsonl
|
||||
|
||||
@@ -93,10 +93,14 @@ segments:
|
||||
# shift the code start. Mark it `rodata` (section_order places .rodata first) so it lands at
|
||||
# 0x80128158 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave).
|
||||
# - [0x0, rodata, head]
|
||||
- [0x0, c, ov_MAIN_012] # code: starts at file 0x0 (overlays open with a prologue)
|
||||
- [0x0, c, ov_MAIN_012]
|
||||
- [0x32270, c, ov_MAIN_012_jr_8015A3C8]
|
||||
- [0x50854, c, ov_MAIN_012_jr_801789AC]
|
||||
- [0x561e0, data, tail]
|
||||
- [0x5ba40, .rodata, ov_MAIN_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5bcec, data, tail2]
|
||||
- [0x5b768, .rodata, ov_MAIN_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5b784, data, tail2]
|
||||
- [0x5ba40, .rodata, ov_MAIN_012_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x5bcec, data, tail3]
|
||||
- [0x5DB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x5DB27] # 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
|
||||
|
||||
@@ -97,7 +97,7 @@ segments:
|
||||
- [0x50854, c, ov_SC02_037_jr_801789AC]
|
||||
- [0x52cd4, c, ov_SC02_037_jr_8017AE2C]
|
||||
- [0x5ba68, data, tail]
|
||||
- [0x9fc6c, .rodata, ov_SC02_037] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fc4c, .rodata, ov_SC02_037] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9fc88, data, tail2]
|
||||
- [0x9ff24, .rodata, ov_SC02_037_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9ff3c, data, tail3]
|
||||
|
||||
@@ -93,10 +93,14 @@ segments:
|
||||
# shift the code start. Mark it `rodata` (section_order places .rodata first) so it lands at
|
||||
# 0x80128158 ahead of the code, a 1-word analogue of main's rodata-island (no ld_interleave).
|
||||
# - [0x0, rodata, head]
|
||||
- [0x0, c, ov_SC03_107] # code: starts at file 0x0 (overlays open with a prologue)
|
||||
- [0x0, c, ov_SC03_107]
|
||||
- [0x32270, c, ov_SC03_107_jr_8015A3C8]
|
||||
- [0x50854, c, ov_SC03_107_jr_801789AC]
|
||||
- [0x5a304, data, tail]
|
||||
- [0x72258, .rodata, ov_SC03_107] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x72504, data, tail2]
|
||||
- [0x71f80, .rodata, ov_SC03_107_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x71f9c, data, tail2]
|
||||
- [0x72258, .rodata, ov_SC03_107_jr_801789AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x72504, data, tail3]
|
||||
- [0x73BE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x73BE7] # 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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -13255,7 +13255,280 @@ LAB_8015a390:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_8015A3C8);
|
||||
|
||||
/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack
|
||||
* Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block),
|
||||
* then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73).
|
||||
* PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe.
|
||||
*/
|
||||
extern s16 currentLocationId;
|
||||
|
||||
extern s32 func_80149D9C(s32 a0);
|
||||
extern void func_80149FA8(void);
|
||||
extern s32 func_80149FB0(s32 a0);
|
||||
extern s32 func_80161B84(void *a0);
|
||||
extern s32 func_80161B18(void *a0);
|
||||
extern s32 func_8014A048(s32 a0);
|
||||
extern void func_8014A218(void);
|
||||
extern s32 func_80161BE0(s32*);
|
||||
extern s32 func_801619A4(s32 *a0);
|
||||
extern s32 func_80149AA8(s32 *a0);
|
||||
extern void func_80149AD4(s32 *a0);
|
||||
extern s32 func_80149B54(s32 * arg0);
|
||||
extern void func_80149BAC(s32 *a0);
|
||||
extern s32 func_801498E0(s32 *a0);
|
||||
extern s32 func_80149954(s32 s0);
|
||||
extern s32 func_80149A64(s32 *a0);
|
||||
extern void func_800CCCC0(s32 a0);
|
||||
extern s32 func_80149CD4(s32 a0);
|
||||
extern void func_8015E880(s32 *a0);
|
||||
extern s32 func_801496D4(void *a0);
|
||||
extern void func_80149704(void);
|
||||
extern s32 func_801488A8(u8 *a0);
|
||||
extern void func_8014C010(s32 a0, s32 a1);
|
||||
extern void func_80147078(s32 *a0, s16 a1);
|
||||
extern void func_80159B70(void *a0);
|
||||
extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8015AC48(s32 a0);
|
||||
extern int func_80148AFC(void *a0);
|
||||
extern void func_80154150(s32 a0, s32 a1);
|
||||
extern void func_80154A74(s32 a0, s32 a1);
|
||||
extern void func_80146DB8(s32 *a0, s32 *a1);
|
||||
extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern u16 func_801487F4(s32 *a0);
|
||||
extern s32 func_8016F1C4(void);
|
||||
extern s32 func_8015AB7C(s32 a0);
|
||||
extern void func_801541D8(u8 *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80148824(void *arg0);
|
||||
extern void func_80147A84(s32 a0);
|
||||
extern void func_801473EC(s32 *a0);
|
||||
extern void func_8014D738(void);
|
||||
extern void func_8015C6E0(s32 *a0);
|
||||
extern void func_8014E934(s32 _arg0);
|
||||
extern void func_80155440(s32 *a0);
|
||||
extern void func_801553C0(s32 a0);
|
||||
extern void func_80161278(void *a0);
|
||||
extern void func_80161C24(s32 a0, s32 a1);
|
||||
extern s32 func_80172608(u8 *a0);
|
||||
extern void func_801483E8(unsigned char*);
|
||||
|
||||
s32 func_8015A3C8(arg0)
|
||||
s32 arg0;
|
||||
{
|
||||
|
||||
extern void (*D_801862A8[])(void *);
|
||||
extern u8 D_80078E78[];
|
||||
|
||||
extern u16 D_800B99DA;
|
||||
extern s32 D_800D5428;
|
||||
extern u8 D_8018622C[];
|
||||
s32 min;
|
||||
s32 grav;
|
||||
s32 hi;
|
||||
s32 t;
|
||||
s32 lo1;
|
||||
s32 lo2;
|
||||
s32 sv;
|
||||
u8 *p;
|
||||
|
||||
p = D_80078E78;
|
||||
if (currentLocationId == 0x302A) {
|
||||
min = -0xC0000;
|
||||
grav = -0x4000;
|
||||
hi = 0;
|
||||
} else {
|
||||
min = -0xB0000;
|
||||
grav = -0x1000;
|
||||
hi = 0;
|
||||
}
|
||||
|
||||
if (func_80149D9C(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_80149FA8)(arg0);
|
||||
return;
|
||||
}
|
||||
((void (*)(s32))func_80149FB0)(arg0);
|
||||
if (((s32 (*)(s32))func_80161B84)(arg0) != 0) {
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(s32))func_80161B18)(arg0) != 0) {
|
||||
return;
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) {
|
||||
if (func_8014A048(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_8014A218)(arg0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) {
|
||||
return;
|
||||
}
|
||||
switch (((s32 (*)(s32))func_801619A4)(arg0)) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 6:
|
||||
if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_80149AD4)(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(s32))func_80149B54)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_80149BAC)(arg0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
((void (*)(s32))func_801498E0)(arg0);
|
||||
break;
|
||||
case 4:
|
||||
((void (*)(s32))func_80149954)(arg0);
|
||||
break;
|
||||
case 5:
|
||||
if (((s32 (*)(s32))func_80149A64)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
func_800CCCC0(arg0);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (func_80149CD4(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_8015E880)(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(s32))func_801496D4)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_80149704)(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(s32))func_801488A8)(arg0) == 0) {
|
||||
sv = *(s32 *)(arg0 + 0x2C);
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
func_8014C010(arg0, 1);
|
||||
((void (*)(s32, s32))func_80147078)(arg0, 0);
|
||||
((void (*)(s32))func_80159B70)(arg0);
|
||||
if (func_8015ABD4(arg0, sv, min) != 0) {
|
||||
func_8015AC48(arg0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
((void (*)(s32))func_80148AFC)(arg0);
|
||||
if (*(u32 *)(arg0 + 0x44) & 0x200) {
|
||||
if (*(s32 *)(arg0 + 0x23C) == 0) {
|
||||
func_80154150(arg0, 0xA);
|
||||
func_80154A74(arg0, 0x1C);
|
||||
}
|
||||
((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018622C));
|
||||
func_80147AD4(arg0, 0, 0, 0);
|
||||
} else {
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
func_80147AD4(arg0, 0, 0, grav);
|
||||
if (*(s32 *)(arg0 + 0x23C) == 0) {
|
||||
if (((s32 (*)(s32))func_801487F4)(arg0) & 4) {
|
||||
if (*(s32 *)(arg0 + 0x2C) < -0x40000) {
|
||||
*(s32 *)(arg0 + 0x2C) = -0x40000;
|
||||
}
|
||||
} else if (func_8016F1C4() == 0) {
|
||||
if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) {
|
||||
if (*(s32 *)(arg0 + 0x2C) < -0x40000) {
|
||||
*(s32 *)(arg0 + 0x2C) = -0x40000;
|
||||
}
|
||||
} else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) {
|
||||
if (*(s32 *)(arg0 + 0x2C) < -0x80000) {
|
||||
*(s32 *)(arg0 + 0x2C) = -0x80000;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x2C) < min) {
|
||||
*(s32 *)(arg0 + 0x2C) = min;
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x2C) >= hi) {
|
||||
*(s32 *)(arg0 + 0x2C) = hi;
|
||||
}
|
||||
lo1 = -0x94000;
|
||||
t = *(s32 *)(arg0 + 0x2C);
|
||||
if (t < lo1) {
|
||||
func_80154150(arg0, 8);
|
||||
} else if (t < -0x70000) {
|
||||
((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF);
|
||||
} else {
|
||||
func_80154150(arg0, 6);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
*(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127;
|
||||
if (func_8016F1C4() == 0) {
|
||||
if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) {
|
||||
if (*(s32 *)(arg0 + 0x2C) < -0x80000) {
|
||||
*(s32 *)(arg0 + 0x2C) = -0x80000;
|
||||
}
|
||||
}
|
||||
if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) {
|
||||
if (*(s32 *)(arg0 + 0x2C) < -0x40000) {
|
||||
*(s32 *)(arg0 + 0x2C) = -0x40000;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x2C) < min) {
|
||||
*(s32 *)(arg0 + 0x2C) = min;
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0x2C) >= hi) {
|
||||
*(s32 *)(arg0 + 0x2C) = hi;
|
||||
}
|
||||
func_80147A84(arg0);
|
||||
if (*(s32 *)(arg0 + 0x23C) == 0) {
|
||||
lo2 = -0x94000;
|
||||
t = *(s32 *)(arg0 + 0x2C);
|
||||
if (t < lo2) {
|
||||
func_80154150(arg0, 8);
|
||||
} else if (t < -0x70000) {
|
||||
((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF);
|
||||
} else {
|
||||
func_80154150(arg0, 6);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
((void (*)(s32))func_801473EC)(arg0);
|
||||
if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) {
|
||||
func_8014C010(arg0, 2);
|
||||
}
|
||||
if (((s32 (*)(s32))func_8014D738)(arg0) != 0) {
|
||||
D_801862A8[*(u16 *)arg0]((void *)arg0);
|
||||
((void (*)(s32))func_8015C6E0)(arg0);
|
||||
return;
|
||||
}
|
||||
if (((s32 (*)(s32))func_8014E934)(arg0) != 0) {
|
||||
((void (*)(s32))func_80155440)(arg0);
|
||||
func_80154150(arg0, 0x12);
|
||||
func_80154A74(arg0, 0x17);
|
||||
*(s32 *)(arg0 + 0x23C) = 1;
|
||||
} else {
|
||||
if (*(s32 *)(arg0 + 0x23C) != 0) {
|
||||
func_801553C0(arg0);
|
||||
func_80154150(arg0, 6);
|
||||
func_80154A74(arg0, 0x21);
|
||||
}
|
||||
*(s32 *)(arg0 + 0x23C) = 0;
|
||||
}
|
||||
if (((s32 (*)(s32))func_80161278)(arg0) == 0) {
|
||||
if (*(u16 *)(arg0 + 0xB8) & 0x2000) {
|
||||
func_80161C24(arg0, *(u16 *)(arg0 + 0x16E));
|
||||
}
|
||||
((void (*)(s32))func_80172608)(arg0);
|
||||
((void (*)(s32))func_801483E8)(arg0);
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015ab7c (src/shared) */
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user