mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-30 07:31:59 -04:00
feat(phase-29 §8e): bank giant func_8013C414 (329, -O0) x1 — all 4 jtbl giants banked x1
Single-table carve jtbl_801D836C (27e, 4-mod-8 first-table = placement-only) into the _o0 subseg; draft spliced clean, no reconciles needed (its only blocker was the missing carve). Whole-binary gate [ OK ] sha1 d19c9580 == check.
This commit is contained in:
+1
-1
@@ -21,7 +21,7 @@ ov_SC01_077_ELF := $(ov_SC01_077_OUT).elf
|
||||
ov_SC01_077_MAPFILE := $(ov_SC01_077_OUT).map
|
||||
ov_SC01_077_LD_SCRIPT := $(ov_SC01_077_OUT).ld
|
||||
ov_SC01_077_SPLAT_YAML := config/splat.ov_SC01_077.yaml
|
||||
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_801380E0.o,tail3.data.o,ov_SC01_077.o,tail4.data.o,ov_SC01_077_jr_8015444C.o,tail5.data.o,ov_SC01_077_jr_80159C84.o,tail6.data.o,ov_SC01_077_jr_8015A3C8.o,tail7.data.o,ov_SC01_077_jr_8015AE2C.o,tail8.data.o,ov_SC01_077_jr_8016AB6C.o,tail9.data.o,ov_SC01_077_jr_801734BC.o,tail10.data.o,ov_SC01_077_jr_80178D40.o,tail11.data.o,ov_SC01_077_jr_8017A4AC.o,tail12.data.o,ov_SC01_077_jr_80182268.o,tail13.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC01_077_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_077_jr_8012ACE0.o,tail2.data.o,ov_SC01_077_jr_801380E0.o,tail3.data.o,ov_SC01_077_o0.o,tail4.data.o,ov_SC01_077.o,tail5.data.o,ov_SC01_077_jr_8015444C.o,tail6.data.o,ov_SC01_077_jr_80159C84.o,tail7.data.o,ov_SC01_077_jr_8015A3C8.o,tail8.data.o,ov_SC01_077_jr_8015AE2C.o,tail9.data.o,ov_SC01_077_jr_8016AB6C.o,tail10.data.o,ov_SC01_077_jr_801734BC.o,tail11.data.o,ov_SC01_077_jr_80178D40.o,tail12.data.o,ov_SC01_077_jr_8017A4AC.o,tail13.data.o,ov_SC01_077_jr_80182268.o,tail14.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC01_077/ov_SC01_077.o: JTBL_PADS := 0,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x38,+0x58
|
||||
build/src/ov_SC01_077/ov_SC01_077_jr_8012ACE0.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc
|
||||
build/src/ov_SC01_077/ov_SC01_077_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
|
||||
@@ -92,26 +92,28 @@ segments:
|
||||
- [0xb0000, data, tail2]
|
||||
- [0xb0098, .rodata, ov_SC01_077_jr_801380E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb00fc, data, tail3]
|
||||
- [0xb0214, .rodata, ov_SC01_077_o0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0280, data, tail4]
|
||||
- [0xb0708, .rodata, ov_SC01_077] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0774, data, tail4]
|
||||
- [0xb0774, data, tail5]
|
||||
- [0xb07dc, .rodata, ov_SC01_077_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0848, data, tail5]
|
||||
- [0xb0848, data, tail6]
|
||||
- [0xb09a4, .rodata, ov_SC01_077_jr_80159C84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb09d8, data, tail6]
|
||||
- [0xb09d8, data, tail7]
|
||||
- [0xb09dc, .rodata, ov_SC01_077_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb09f8, data, tail7]
|
||||
- [0xb09f8, data, tail8]
|
||||
- [0xb09fc, .rodata, ov_SC01_077_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0a18, data, tail8]
|
||||
- [0xb0a18, data, tail9]
|
||||
- [0xb0a70, .rodata, ov_SC01_077_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0a90, data, tail9]
|
||||
- [0xb0a90, data, tail10]
|
||||
- [0xb0b10, .rodata, ov_SC01_077_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0b24, data, tail10]
|
||||
- [0xb0b24, data, tail11]
|
||||
- [0xb0ccc, .rodata, ov_SC01_077_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0e44, data, tail11]
|
||||
- [0xb0e44, data, tail12]
|
||||
- [0xb0ed4, .rodata, ov_SC01_077_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb0f60, data, tail12]
|
||||
- [0xb0f60, data, tail13]
|
||||
- [0xb1148, .rodata, ov_SC01_077_jr_80182268] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb1168, data, tail13]
|
||||
- [0xb1168, data, tail14]
|
||||
- [0xB29D4, bin, trailing] # final 3 bytes (EOF 0xB29D7 not word-aligned; spimdisasm drops
|
||||
# a trailing partial word and a <4-byte `data` carve emits nothing,
|
||||
# so use `bin` = raw .incbin, byte-exact). Word-aligned overlays omit this.
|
||||
|
||||
@@ -84,7 +84,93 @@ void func_8013C360(s32 a0) {
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_077/nonmatchings/ov_SC01_077_o0", func_8013C414);
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH
|
||||
#include "common.h"
|
||||
|
||||
typedef struct {
|
||||
u8 b0;
|
||||
u8 b1;
|
||||
u8 b2;
|
||||
u8 type;
|
||||
u32 w1;
|
||||
u32 w2;
|
||||
} T3Reloc; /* 0xC */
|
||||
|
||||
void func_8013C414(s32 param_1, s32 param_2)
|
||||
{
|
||||
s32 base10; /* 0x00 */
|
||||
s32 p; /* 0x04 */
|
||||
s32 q; /* 0x08 */
|
||||
s32 base4008; /* 0x0C */
|
||||
s32 lo; /* 0x10 */
|
||||
u32 i; /* 0x14 */
|
||||
s32 unused; /* 0x18 */
|
||||
s32 base8; /* 0x1C */
|
||||
T3Reloc *r; /* 0x20 */
|
||||
T3Reloc *s; /* 0x24 */
|
||||
|
||||
if (*(s32 *)(param_2 + 4) == 0) {
|
||||
base10 = param_2 + 0x10;
|
||||
base4008 = param_1 + 0x4008;
|
||||
lo = *(s32 *)(param_2 + 0xC) + base10;
|
||||
base8 = param_1 + 8;
|
||||
p = base10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)p = *(s32 *)p + base8;
|
||||
if (*(s32 *)(p + 4) != 0) {
|
||||
*(s32 *)(p + 4) = *(s32 *)(p + 4) + base10;
|
||||
q = *(s32 *)(p + 4);
|
||||
*(s32 *)q = *(s32 *)q + q;
|
||||
*(s32 *)(q + 0x14) = *(s32 *)(q + 0x14) + q;
|
||||
r = (T3Reloc *)*(s32 *)(q + 0x14);
|
||||
*(s32 *)(q + 0x18) = *(s32 *)(q + 0x18) * 0xC + *(s32 *)(q + 0x14);
|
||||
s = (T3Reloc *)*(s32 *)(q + 0x18);
|
||||
while (r < s) {
|
||||
switch (r->type) {
|
||||
case 0x24:
|
||||
case 0x2C:
|
||||
case 0x34:
|
||||
case 0x3C:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
case 0x26:
|
||||
case 0x2E:
|
||||
case 0x36:
|
||||
case 0x3E:
|
||||
if ((*(u32 *)r) & 0x800000) {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0x7FFFFF) + lo;
|
||||
} else {
|
||||
(*(u32 *)r) = ((*(u32 *)r) & 0xFFFFFF) + base4008;
|
||||
}
|
||||
break;
|
||||
}
|
||||
r++;
|
||||
}
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
*(s32 *)(param_2 + 4) = 1;
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
if (*(s32 *)(p + 8) == 0) {
|
||||
*(s32 *)(p + 8) = *(s32 *)(*(s32 *)p);
|
||||
}
|
||||
p = p + 0xC;
|
||||
}
|
||||
} else {
|
||||
p = param_2 + 0x10;
|
||||
for (i = 0; i < *(u32 *)(param_2 + 8); i++) {
|
||||
*(s32 *)(*(s32 *)p) = *(s32 *)(p + 8);
|
||||
p = p + 0xC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_8013C938(void) {
|
||||
D_801DAAC0 = 1;
|
||||
|
||||
Reference in New Issue
Block a user