feat(phase-30 S48-T6): propagate func_8017F83C to its zero-crack siblings

This commit is contained in:
Drew T
2026-08-11 22:58:05 -06:00
parent 526d512497
commit e93922ffce
10 changed files with 10720 additions and 1904 deletions
+3 -3
View File
@@ -2481,7 +2481,7 @@ ov_SC03_110_ELF := $(ov_SC03_110_OUT).elf
ov_SC03_110_MAPFILE := $(ov_SC03_110_OUT).map
ov_SC03_110_LD_SCRIPT := $(ov_SC03_110_OUT).ld
ov_SC03_110_SPLAT_YAML := config/splat.ov_SC03_110.yaml
ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110.o,ov_SC03_110_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_80135888.o,tail3.data.o,ov_SC03_110_jr_80135A4C.o,tail4.data.o,ov_SC03_110_jr_80135D20.o,tail5.data.o,ov_SC03_110_jr_801380E0.o,ov_SC03_110_o0c.o,tail6.data.o,ov_SC03_110_jr_8013F350.o,tail7.data.o,ov_SC03_110_jr_8013FFD8.o,tail8.data.o,ov_SC03_110_jr_80140608.o,tail9.data.o,ov_SC03_110_jr_8015444C.o,ov_SC03_110_jr_80154C24.o,ov_SC03_110_jr_801588CC.o,ov_SC03_110_jr_80159C84.o,tail10.data.o,ov_SC03_110_jr_8015A3C8.o,tail11.data.o,ov_SC03_110_jr_8015AE2C.o,tail12.data.o,ov_SC03_110_jr_8015C32C.o,tail13.data.o,ov_SC03_110_jr_8016AB6C.o,tail14.data.o,ov_SC03_110_jr_80171B4C.o,ov_SC03_110_jr_801734BC.o,tail15.data.o,ov_SC03_110_jr_801789AC.o,ov_SC03_110_jr_80178D40.o,tail16.data.o,ov_SC03_110_jr_8017A4AC.o,tail17.data.o,ov_SC03_110_jr_8017AE2C.o,ov_SC03_110_jr_8017D898.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110.o,ov_SC03_110_jr_8012ACE0.o,tail2.data.o,ov_SC03_110_jr_80135888.o,tail3.data.o,ov_SC03_110_jr_80135A4C.o,tail4.data.o,ov_SC03_110_jr_80135D20.o,tail5.data.o,ov_SC03_110_jr_801380E0.o,ov_SC03_110_o0c.o,tail6.data.o,ov_SC03_110_jr_8013F350.o,tail7.data.o,ov_SC03_110_jr_8013FFD8.o,tail8.data.o,ov_SC03_110_jr_80140608.o,tail9.data.o,ov_SC03_110_jr_8015444C.o,ov_SC03_110_jr_80154C24.o,ov_SC03_110_jr_801588CC.o,ov_SC03_110_jr_80159C84.o,tail10.data.o,ov_SC03_110_jr_8015A3C8.o,tail11.data.o,ov_SC03_110_jr_8015AE2C.o,tail12.data.o,ov_SC03_110_jr_8015C32C.o,tail13.data.o,ov_SC03_110_jr_8016AB6C.o,tail14.data.o,ov_SC03_110_jr_80171B4C.o,ov_SC03_110_jr_801734BC.o,tail15.data.o,ov_SC03_110_jr_801789AC.o,ov_SC03_110_jr_80178D40.o,tail16.data.o,ov_SC03_110_jr_8017A4AC.o,tail17.data.o,ov_SC03_110_jr_8017AE2C.o,ov_SC03_110_jr_8017D898.o,tail18.data.o,ov_SC03_110_jr_8017FBC8.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_110/ov_SC03_110.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_110/ov_SC03_110_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC03_110/ov_SC03_110_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
@@ -2552,7 +2552,7 @@ ov_SC03_112_ELF := $(ov_SC03_112_OUT).elf
ov_SC03_112_MAPFILE := $(ov_SC03_112_OUT).map
ov_SC03_112_LD_SCRIPT := $(ov_SC03_112_OUT).ld
ov_SC03_112_SPLAT_YAML := config/splat.ov_SC03_112.yaml
ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112.o,ov_SC03_112_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_80135888.o,tail3.data.o,ov_SC03_112_jr_80135A4C.o,tail4.data.o,ov_SC03_112_jr_80135D20.o,tail5.data.o,ov_SC03_112_jr_801380E0.o,ov_SC03_112_o0c.o,tail6.data.o,ov_SC03_112_jr_8013F350.o,tail7.data.o,ov_SC03_112_jr_8013FFD8.o,tail8.data.o,ov_SC03_112_jr_80140608.o,tail9.data.o,ov_SC03_112_jr_8015444C.o,ov_SC03_112_jr_80154C24.o,ov_SC03_112_jr_801588CC.o,ov_SC03_112_jr_80159C84.o,tail10.data.o,ov_SC03_112_jr_8015A3C8.o,tail11.data.o,ov_SC03_112_jr_8015AE2C.o,tail12.data.o,ov_SC03_112_jr_8015C32C.o,tail13.data.o,ov_SC03_112_jr_8016AB6C.o,tail14.data.o,ov_SC03_112_jr_80171B4C.o,ov_SC03_112_jr_801734BC.o,tail15.data.o,ov_SC03_112_jr_801789AC.o,ov_SC03_112_jr_80178D40.o,tail16.data.o,ov_SC03_112_jr_8017A4AC.o,tail17.data.o,ov_SC03_112_jr_8017AE2C.o,ov_SC03_112_jr_8017C294.o,tail18.data.o,ov_SC03_112_jr_80182BF8.o,ov_SC03_112_jr_80183AE0.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112.o,ov_SC03_112_jr_8012ACE0.o,tail2.data.o,ov_SC03_112_jr_80135888.o,tail3.data.o,ov_SC03_112_jr_80135A4C.o,tail4.data.o,ov_SC03_112_jr_80135D20.o,tail5.data.o,ov_SC03_112_jr_801380E0.o,ov_SC03_112_o0c.o,tail6.data.o,ov_SC03_112_jr_8013F350.o,tail7.data.o,ov_SC03_112_jr_8013FFD8.o,tail8.data.o,ov_SC03_112_jr_80140608.o,tail9.data.o,ov_SC03_112_jr_8015444C.o,ov_SC03_112_jr_80154C24.o,ov_SC03_112_jr_801588CC.o,ov_SC03_112_jr_80159C84.o,tail10.data.o,ov_SC03_112_jr_8015A3C8.o,tail11.data.o,ov_SC03_112_jr_8015AE2C.o,tail12.data.o,ov_SC03_112_jr_8015C32C.o,tail13.data.o,ov_SC03_112_jr_8016AB6C.o,tail14.data.o,ov_SC03_112_jr_80171B4C.o,ov_SC03_112_jr_801734BC.o,tail15.data.o,ov_SC03_112_jr_801789AC.o,ov_SC03_112_jr_80178D40.o,tail16.data.o,ov_SC03_112_jr_8017A4AC.o,tail17.data.o,ov_SC03_112_jr_8017AE2C.o,ov_SC03_112_jr_8017C294.o,tail18.data.o,ov_SC03_112_jr_801817E0.o,tail19.data.o,ov_SC03_112_jr_80182BF8.o,ov_SC03_112_jr_80183AE0.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_112/ov_SC03_112.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_112/ov_SC03_112_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC03_112/ov_SC03_112_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
@@ -3510,7 +3510,7 @@ ov_SC05_001_ELF := $(ov_SC05_001_OUT).elf
ov_SC05_001_MAPFILE := $(ov_SC05_001_OUT).map
ov_SC05_001_LD_SCRIPT := $(ov_SC05_001_OUT).ld
ov_SC05_001_SPLAT_YAML := config/splat.ov_SC05_001.yaml
ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001.o,ov_SC05_001_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_80135888.o,tail3.data.o,ov_SC05_001_jr_80135A4C.o,tail4.data.o,ov_SC05_001_jr_80135D20.o,tail5.data.o,ov_SC05_001_jr_801380E0.o,ov_SC05_001_o0c.o,tail6.data.o,ov_SC05_001_jr_8013F350.o,tail7.data.o,ov_SC05_001_jr_8013FFD8.o,tail8.data.o,ov_SC05_001_jr_80140608.o,tail9.data.o,ov_SC05_001_jr_8015444C.o,ov_SC05_001_jr_80154C24.o,ov_SC05_001_jr_801588CC.o,ov_SC05_001_jr_80159C84.o,tail10.data.o,ov_SC05_001_jr_8015A3C8.o,tail11.data.o,ov_SC05_001_jr_8015AE2C.o,tail12.data.o,ov_SC05_001_jr_8015C32C.o,tail13.data.o,ov_SC05_001_jr_8016AB6C.o,tail14.data.o,ov_SC05_001_jr_80171B4C.o,ov_SC05_001_jr_801734BC.o,tail15.data.o,ov_SC05_001_jr_801789AC.o,ov_SC05_001_jr_80178D40.o,tail16.data.o,ov_SC05_001_jr_8017A4AC.o,tail17.data.o,ov_SC05_001_jr_8017AE2C.o,ov_SC05_001_jr_8017BEBC.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001.o,ov_SC05_001_jr_8012ACE0.o,tail2.data.o,ov_SC05_001_jr_80135888.o,tail3.data.o,ov_SC05_001_jr_80135A4C.o,tail4.data.o,ov_SC05_001_jr_80135D20.o,tail5.data.o,ov_SC05_001_jr_801380E0.o,ov_SC05_001_o0c.o,tail6.data.o,ov_SC05_001_jr_8013F350.o,tail7.data.o,ov_SC05_001_jr_8013FFD8.o,tail8.data.o,ov_SC05_001_jr_80140608.o,tail9.data.o,ov_SC05_001_jr_8015444C.o,ov_SC05_001_jr_80154C24.o,ov_SC05_001_jr_801588CC.o,ov_SC05_001_jr_80159C84.o,tail10.data.o,ov_SC05_001_jr_8015A3C8.o,tail11.data.o,ov_SC05_001_jr_8015AE2C.o,tail12.data.o,ov_SC05_001_jr_8015C32C.o,tail13.data.o,ov_SC05_001_jr_8016AB6C.o,tail14.data.o,ov_SC05_001_jr_80171B4C.o,ov_SC05_001_jr_801734BC.o,tail15.data.o,ov_SC05_001_jr_801789AC.o,ov_SC05_001_jr_80178D40.o,tail16.data.o,ov_SC05_001_jr_8017A4AC.o,tail17.data.o,ov_SC05_001_jr_8017AE2C.o,ov_SC05_001_jr_8017BEBC.o,tail18.data.o,ov_SC05_001_jr_80183508.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC05_001/ov_SC05_001.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC05_001/ov_SC05_001_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC05_001/ov_SC05_001_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
+3
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC03_110_jr_8017A4AC]
- [0x52cd4, c, ov_SC03_110_jr_8017AE2C]
- [0x55740, c, ov_SC03_110_jr_8017D898]
- [0x57a70, c, ov_SC03_110_jr_8017FBC8]
- [0x59bc8, data, tail]
- [0x779f0, .rodata, ov_SC03_110] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x77acc, .rodata, ov_SC03_110_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
@@ -164,6 +165,8 @@ segments:
- [0x78b10, .rodata, ov_SC03_110_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x78b24, .rodata, ov_SC03_110_jr_8017D898] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x78b44, data, tail18]
- [0x78b58, .rodata, ov_SC03_110_jr_8017FBC8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x78b6c, data, tail19]
- [0x7A384, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x7A387] # 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
+4 -1
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC03_112_jr_8017A4AC]
- [0x52cd4, c, ov_SC03_112_jr_8017AE2C]
- [0x5413c, c, ov_SC03_112_jr_8017C294]
- [0x59688, c, ov_SC03_112_jr_801817E0]
- [0x5aaa0, c, ov_SC03_112_jr_80182BF8]
- [0x5b988, c, ov_SC03_112_jr_80183AE0]
- [0x5d584, data, tail]
@@ -166,9 +167,11 @@ segments:
- [0x837f8, .rodata, ov_SC03_112_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8380c, .rodata, ov_SC03_112_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8382c, data, tail18]
- [0x83834, .rodata, ov_SC03_112_jr_801817E0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x83848, data, tail19]
- [0x83928, .rodata, ov_SC03_112_jr_80182BF8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x83990, .rodata, ov_SC03_112_jr_80183AE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x839b8, data, tail19]
- [0x839b8, data, tail20]
- [0x84FF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x84FF7] # 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
+3
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC05_001_jr_8017A4AC]
- [0x52cd4, c, ov_SC05_001_jr_8017AE2C]
- [0x53d64, c, ov_SC05_001_jr_8017BEBC]
- [0x5b3b0, c, ov_SC05_001_jr_80183508]
- [0x5d8c4, data, tail]
- [0x8b4b0, .rodata, ov_SC05_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8b58c, .rodata, ov_SC05_001_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
@@ -164,6 +165,8 @@ segments:
- [0x8c5d0, .rodata, ov_SC05_001_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8c5e4, .rodata, ov_SC05_001_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8c604, data, tail18]
- [0x8c618, .rodata, ov_SC05_001_jr_80183508] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8c62c, data, tail19]
- [0x8DEAC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x8DEAF] # 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
-719
View File
@@ -3570,722 +3570,3 @@ TAIL_5DC:
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017F9CC);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017FB14);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017FBC8);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017FF64);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8017FFC8);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180094);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_801800F0);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180270);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8018035C);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_8018066C);
extern void func_80180AF0(void);
extern void func_80180D2C(void);
void func_801806B8(s32 a0) {
func_80180AF0();
((void (*)(s32))func_80180D2C)(a0);
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_801806E8);
void func_8018076C(s32 param_1) {
extern void func_80180C40(s32);
extern void func_80180D2C(void);
extern void func_8012DBD0(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8012CC64(s32 a0, void *a1);
extern s32 func_8012CC1C(s32 a0, void *a1);
extern s32 func_8012CBA4(s32 a0);
extern void func_8012B23C(s32 a0);
extern void func_80131C78(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80131E00(s32 a0, s32 a1);
extern s32 D_8019C004;
u8 bVar1;
s32 uVar3;
s32 pad[2];
if (0xf < *(s16 *)(param_1 + 0xa)) {
((void (*)(void *))func_80180C40)((void *)param_1);
return;
}
if ((*(s32 *)(param_1 + 0x10) != 0) || (*(s32 *)(param_1 + 0x18) != 0)) {
func_8012DBD0(param_1, 0x50,
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + 0x800, 0x1D);
}
bVar1 = *(u8 *)(param_1 + 0xc2);
switch (bVar1) {
case 0:
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
uVar3 = func_8012CC64(param_1, &D_8019C004);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
*(u8 *)(param_1 + 0xc2) = 2;
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = 0xFFF30000;
*(s32 *)(param_1 + 0x1c) = 0;
}
goto LAB_80180740;
case 2: {
s32 saved14;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
saved14 = *(s32 *)(param_1 + 0x14);
uVar3 = func_8012CC64(param_1, &D_8019C004);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = saved14;
*(u8 *)(param_1 + 0xc2) = 3;
*(s32 *)(param_1 + 0x1c) = 0;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
}
goto LAB_80180740;
}
case 3:
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x10) * 15 / 16;
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0x18) * 15 / 16;
if ((*(u8 *)(param_1 + 0xc3) & 1) == 0) {
goto CASE3_CC64;
}
uVar3 = func_8012CC1C(param_1, &D_8019C004);
if ((uVar3 & 0x6000) != 0) {
goto CASE3_TAIL;
}
goto LAB_80180730;
CASE3_CC64:
uVar3 = func_8012CC64(param_1, &D_8019C004);
if ((uVar3 & 0x4000) == 0) {
goto CASE3_NO4000;
}
LAB_80180644:
func_8012B23C(param_1);
*(u8 *)(param_1 + 0xc2) = 4;
goto LAB_80180740;
CASE3_NO4000:
if ((uVar3 & 0x2000) == 0) {
goto CASE3_TAIL;
}
if ((uVar3 & 0xff) != 0x1a) {
goto CASE3_SETFLAG;
}
LAB_8018066C:
((void (*)(void *))func_80180C40)((void *)param_1);
return;
CASE3_SETFLAG:
*(u8 *)(param_1 + 0xc3) = *(u8 *)(param_1 + 0xc3) | 1;
CASE3_TAIL:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x11) {
goto LAB_80180740;
}
if ((uVar3 & 0x6000) == 0) {
goto LAB_80180730;
}
goto CASE34_TAIL;
case 4:
uVar3 = func_8012CBA4(param_1);
if ((uVar3 & 0x2000) == 0) {
goto CASE4_COUNTER;
}
CASE34_TAIL:
func_80131C78(param_1);
goto LAB_80180740;
CASE4_COUNTER:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x3d) {
goto LAB_80180740;
}
goto LAB_80180730;
default:
goto LAB_80180740;
}
LAB_80180730:
func_80131E00(param_1, 0xd);
return;
LAB_80180740:
((s32 (*)(s32))func_80180D2C)(param_1);
return;
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180AF0);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180B54);
void func_80180BA0(void *a0) {
s32 v1 = *(s32 *)((s32)a0 + 0x20);
*(s32 *)((s32)a0 + 0x1C) = 0x1E;
*(s16 *)((s32)a0 + 0x5C) = 0;
*(s16 *)(v1 + 0x10) = 0;
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180BB8);
extern void func_80180E10(s32 arg0);
extern void func_8002A04C(s32 a0);
extern void func_80180C40(s32 arg0);
void func_80180C08(s32 arg0) {
func_80180E10(arg0);
((void (*)(s32))func_8002A04C)(arg0);
func_80180C40(arg0);
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180C40);
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C098(void);
void func_80180CF4(s32 arg0) {
s32 temp_v0;
temp_v0 = *(s32 *)(arg0 + 0xd0);
((void (*)(s32 *, s32))func_80016714)((s32 *)temp_v0, 0x38);
((void (*)(void *))func_8012C098)((void *)arg0);
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180D2C);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180E10);
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017D898", func_80180F08);
extern void func_80181CB4(void *a0);
void func_80180FE0(void *a0) {
extern void (*D_8019C7D0[])(void);
D_8019C7D0[*(u16 *)((s32)a0 + 0x2)]();
if (*(u16 *)((s32)a0 + 0x0) != 0) {
*(s32 *)((s32)a0 + 0xE8) = *(s32 *)((s32)a0 + 0xE8) + 1;
if ((*(s32 *)((s32)a0 + 0xE8) & 0xF) == 0) {
func_80181CB4(a0);
}
}
}
extern s32 rand(void);
extern s32 func_8012C354(s32 *a0, s32 a1);
extern void func_8012A828(s32 *a0, s32 a1);
extern void func_80143994(s32 *a0, s32 a1);
void func_8018105C(void *arg0) {
extern s32 D_8019C764;
extern s32 D_8019C7A8;
extern s32 D_8019ECC0;
s32 t;
if (func_8012C354(arg0, &D_8019C764)) {
*(u8 *)((char *)arg0 + 0xC0) = 1;
*(s32 *)((char *)arg0 + 0xB4) = -1;
*(s32 **)((char *)arg0 + 0xBC) = &D_8019C7A8;
*(u32 *)((char *)arg0 + 0xC4) |= 1;
*(s32 *)((char *)arg0 + 0xE4) = -((rand() % 8 + 0xC) << 16);
func_8012A828(arg0, &D_8019ECC0);
func_80143994(arg0, 0x1000);
t = *(u16 *)((char *)arg0 + 0x70) & 0x10;
if (t != 0) {
t = 3;
} else {
t = 1;
}
*(s16 *)((char *)arg0 + 0x2) = t;
}
}
extern s32 rand(void);
extern void func_8012B200(void *a0);
void func_8018111C(void *a0) {
s16 r;
s16 t;
r = rand();
*(u16 *)((s32)a0 + 0x104) = *(u16 *)((s32)a0 + 0xFC);
t = r;
func_8012B200(a0);
if (*(u16 *)((s32)a0 + 0x70) & 1) {
*(s32 *)((s32)a0 + 0x1C) = (s16)(r % 1800) + 0xE10;
} else {
*(s32 *)((s32)a0 + 0x1C) = (s16)(r % 60) + 0x78;
}
*(s16 *)((s32)a0 + 0xFE) = t % 32 + 0xA;
*(s16 *)((s32)a0 + 0x2) = 2;
}
extern void func_80181BF0(s32 *a0, s32 a1, s32 a2);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8012CBF4(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_80181C9C(void);
extern s32 rand(void);
void func_80181244(s32 a0) {
s32 sp10[2];
s32 t;
s32 r;
func_80181BF0(sp10, a0, a0 + 0x102);
t = sp10[0];
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t;
r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16,
*(s16 *)(a0 + 0xFE));
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r;
func_8012B178(a0, *(s32 *)(a0 + 0xE4));
func_8012CBF4(a0);
if ((*(u16 *)(a0 + 0x70) & 2) == 0) {
if (func_8012BEE8(a0)) {
if (*(s32 *)(a0 + 0xE0) == 0) {
if (((s32 (*)(s32))func_80181C9C)(a0)) {
if (*(u16 *)(a0 + 0x70) & 1) {
*(s32 *)(a0 + 0x1C) = rand() % 0x708 + 0xE10;
} else {
*(s32 *)(a0 + 0x1C) = rand() % 0x3C + 0x78;
}
} else {
*(s16 *)(a0 + 0x2) = 5;
}
} else {
*(s16 *)(a0 + 0x2) = 1;
}
}
}
}
extern s32 rand(void);
extern void func_8012B200(void *a0);
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
void func_801813B4(s32 a0) {
u8 auStack_18[8];
s32 tmp;
s32 base;
s32 off;
s32 val;
func_8012B200((void *)a0);
*(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80;
*(s16 *)(a0 + 0xFE) = rand() % 32 + 10;
func_8012B0B4((unsigned int *)auStack_18, rand() % 0x1000,
rand() % *(s32 *)(a0 + 0xDC));
tmp = *(s32 *)auStack_18;
*(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + tmp;
*(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (tmp >> 16);
if (*(u16 *)(a0 + 0x70) & 0x20) {
off = rand() % 256;
base = *(s16 *)(a0 + 0xFC);
if (rand() & 1) {
val = base + off;
} else {
val = base - off;
}
*(s16 *)(a0 + 0x104) = val;
} else {
*(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256;
}
*(s16 *)(a0 + 0x2) = 4;
}
extern s32 func_8012B77C(s32 out, s32 from, s32 to);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8012CBF4(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
extern s32 rand(void);
void func_80181548(s32 a0) {
extern u16 D_80126B62;
s32 sp10[6];
u8 sp28[8];
s16 q;
s32 t;
s32 r;
*(s16 *)((s32)sp10 + 0x2) = *(u16 *)(a0 + 0x102);
*(s16 *)((s32)sp10 + 0xA) = *(u16 *)(a0 + 0x106);
q = *(u16 *)(a0 + 0x104);
*(s16 *)((s32)sp10 + 0x6) = q;
if ((*(u16 *)(a0 + 0x70) & 0x20) == 0) {
*(s16 *)((s32)sp10 + 0x6) = q + D_80126B62;
} else {
*(s16 *)((s32)sp10 + 0x6) = q + *(u16 *)(a0 + 0x8A);
}
func_8012B77C((s32)sp28, a0 + 4, (s32)sp10);
t = *(s32 *)sp28;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t;
r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16,
*(s16 *)(a0 + 0xFE));
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r;
func_8012B178(a0, *(s32 *)(a0 + 0xE4));
func_8012CBF4(a0);
if (func_8012BEE8(a0)) {
s32 base;
s32 off;
s32 val;
*(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80;
*(s16 *)(a0 + 0xFE) = rand() % 32 + 10;
func_8012B0B4((unsigned int *)sp28, rand() % 0x1000,
rand() % *(s32 *)(a0 + 0xDC));
t = *(s32 *)sp28;
*(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + t;
*(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (t >> 16);
if (*(u16 *)(a0 + 0x70) & 0x20) {
off = rand() % 256;
base = *(s16 *)(a0 + 0xFC);
if (rand() & 1) {
val = base + off;
} else {
val = base - off;
}
*(s16 *)(a0 + 0x104) = val;
} else {
*(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256;
}
}
}
extern s32 rand(void);
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
/* Declarations conformed VERBATIM to the TU's existing ones
* (ov_SC02_035_jr_8017BEBC.c:5139 and :5117) — type disagreements are
* pushed to casts at the use sites below. Zero codegen change. */
extern void func_80181BF0(s32 *a0, s32 a1, s32 a2);
extern void func_8012B200(void *a0);
extern void func_8012B2CC(s32 a0);
extern void func_8012B178(s32 a0, s32 a1);
void func_8018179C(s32 a0) {
s16 sp10[4];
s32 sp18[2];
s16 r;
s32 t;
s32 u;
r = rand();
func_8012B0B4((unsigned int *)sp18, (s16)(r % 4095), (s16)(r % 128) + 0xC0);
t = sp18[0];
sp10[1] = -0x30;
sp10[0] = t;
sp10[2] = t >> 16;
func_80181BF0(sp18, a0, (s32)sp10);
u = sp18[0];
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16;
func_8012B200((void *)a0);
func_8012B2CC(a0);
func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFFE0000);
*(s16 *)(a0 + 0x2) = 6;
*(s16 *)(a0 + 0x34) = 0;
}
extern void func_80181BF0(s32 *a0, s32 a1, s32 a2);
extern s32 func_8012B8E4(s32 a0, s32 a1);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012CBF4(s32 a0);
extern void func_8012B200(void *a0);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_80181BC4(s32 a0);
extern s32 rand(void);
void func_801818A8(s32 a0) {
extern u8 D_8019C7A0[];
s32 sp10[2];
s32 t;
s32 u;
switch (*(u16 *)(a0 + 0x34)) {
case 0:
if (((s32 (*)(s32))func_8012CBF4)(a0)) {
*(s32 *)(a0 + 0x1C) = 0x1E;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
*(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
} else if (*(s16 *)(a0 + 0x100) < *(s16 *)(a0 + 0xA)) {
*(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0x100);
*(s32 *)(a0 + 0x1C) = 0x1E;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
*(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
}
break;
case 1:
t = func_8012B8E4(a0, 6);
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) =
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + t;
if (func_8012BEE8(a0)) {
if (rand() & 1) {
*(s16 *)(a0 + 0x2) = 1;
} else {
*(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
func_8012B200((void *)a0);
*(s32 *)(a0 + 0x1C) = 0x20;
func_8002D4C8(0x6FF, 0);
}
}
break;
case 2:
func_80181BF0(sp10, a0, (s32)D_8019C7A0);
u = sp10[0];
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16;
func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFF80000);
func_8012CBF4(a0);
if (func_80181BC4(a0) == 1) {
*(s16 *)(a0 + 0x2) = 1;
} else if (func_8012BEE8(a0)) {
*(s16 *)(a0 + 0x2) = 1;
}
break;
default:
*(s16 *)(a0 + 0x2) = 1;
break;
}
}
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012E778(s32 a0, s32 a1);
extern void func_8012E88C(s32 a0);
extern void func_8012A828(s32 *a0, s32 a1);
void func_80181A44(void *arg0) {
extern s32 D_8019ECC0;
if (func_8012BEE8((s32)arg0)) {
if (!func_8012E778((s32)arg0, 0xA000C8)) {
{
s32 t;
t = *(u16 *)((char *)arg0 + 0x70) & 0x10;
*(s16 *)((char *)arg0 + 0x2) = (t == 0) ? 1 : 3;
}
*(s16 *)((char *)arg0 + 0x5C) =
*(u16 *)(*(s32 *)((char *)arg0 + 0x78) + 0x2);
*(s16 *)((char *)arg0 + 0x76) =
*(u16 *)(*(s32 *)((char *)arg0 + 0x78));
*(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x18) =
*(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1A) =
*(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1C) = 0x1000;
*(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x2C) &= 0x10;
func_8012E88C((s32)arg0);
func_8012A828(arg0, &D_8019ECC0);
}
}
}
extern void func_8002A04C(s32 a0);
extern void func_8012C218(void);
extern void func_8012E8A8(u8 *a0);
void func_80181B00(void *arg0) {
func_8002A04C((s32)arg0);
if ((*(s16 *)((char *)arg0 + 0x70) & 0x8000) != 0) {
s32 v1 = *(s32 *)((char *)arg0 + 0x20);
*(s16 *)((char *)arg0 + 0x2) = 0x7;
*(s8 *)((char *)arg0 + 0xC1) = 0;
*(s32 *)((char *)arg0 + 0x1C) = 0x40;
*(s16 *)((char *)arg0 + 0x5E) = 0;
*(s16 *)((char *)arg0 + 0x5C) = 0;
*(s16 *)((char *)v1 + 0x12) = 0;
*(s16 *)((char *)v1 + 0x10) = 0;
func_8012E8A8((u8 *)arg0);
*(s16 *)((char *)arg0 + 0x6) = *(u16 *)((char *)arg0 + 0x88);
*(s16 *)((char *)arg0 + 0xA) = *(u16 *)((char *)arg0 + 0x8A);
*(s16 *)((char *)arg0 + 0xE) = *(u16 *)((char *)arg0 + 0x8C);
} else {
((void (*)(void *))func_8012C218)(arg0);
}
}
extern void func_8012A828(s32 *a0, s32 a1);
extern s32 D_8019ECC0;
void func_80181B8C(void *arg0) {
*(s16 *)((char *)arg0 + 0x2) = 1;
*(s16 *)((char *)arg0 + 0x5c) = *(u16 *)(*(s32 *)((char *)arg0 + 0x78) + 0x2);
func_8012A828(arg0, &D_8019ECC0);
}
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
extern u8 D_8019C7F0[];
s32 func_80181BC4(s32 arg0) {
return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_8019C7F0[0], &D_8019C7F0[8], 5) != 0;
}
/* func_80181BF0 — MATCH (43 ins). Family of 10 / 430 templatable ins.
* Keys:
* (1) `la $v1,D_80126CBA` + `lh 0($v1)` + `addiu $a0,$v1,-6` is ONE POINTER LOCAL
* (`s16 *q = &D_80126CBA;` then `q - 3`), NOT two externs. A plain `D_80126CBA`
* read folds %lo into the load (`lui %hi / lh %lo(sym)($r)`) and `&D_80126CB4`
* would emit its own second lui — 2 extra ins. The full-address materialisation
* is the tell that the C bound the address to a variable.
* (2) `s32 sp10[4]; s32 sp20;` in THAT declaration order => sp+0x10 / sp+0x20; the
* 3 halfword fields are written `*(s16 *)((s32)sp10 + 0x2/0x6/0xA)` — same form
* as the matched siblings (src/ov_SC03_099/ov_SC03_099_jr_8017BEBC.c:4779).
* (3) The TU declares `extern void func_80181BF0(s32 *, s32, s32);` at file scope
* 3x (:5197 :5285 :5319), so an `s32 *` return is a HARD cc1 `conflicting types`
* error. The trailing `addu $v0,$s0,$zero` therefore comes from a $2-pinned temp.
* (4) The pin is load-bearing twice: pinning the POST-CALL temp to $v0 is what stops
* sched2 hoisting the return copy into the load-delay slot (unpinned => `lw $v1 /
* move $v0,$s0 / sw $v1,0($v0)`, 42 ins, LENGTH-DRIFT -1). Tried and rejected:
* `s32 sp20[2]`, `a0[0] =`, a named s32 temp, a cast-return — all identical DIFF.
* (5) `rv = (s32)a0;` alone is DELETED by flow ($2 is dead at the end of a void fn).
* The empty volatile asm keeps it live and emits zero bytes (#APP/#NO_APP only).
* Verified: spliced into the real TU, cc1 emits the identical instruction stream and
* exactly the same 10 diagnostics as the unmodified TU (zero new). */
extern s32 func_8012B77C(s32 out, s32 from, s32 to);
void func_80181BF0(s32 *a0, s32 a1, s32 a2) {
extern s16 D_80126CBA;
s32 sp10[4];
s32 sp20;
s16 *q;
u16 *p;
s16 t;
register s32 rv __asm__("$2");
q = &D_80126CBA;
if (*q == 0) {
p = (u16 *)(q - 3);
*(s32 *)(a1 + 0xE0) = 0;
} else {
p = (u16 *)(a1 + 0x88);
*(s32 *)(a1 + 0xE0) = 1;
}
*(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2;
t = p[1] + *(u16 *)(a2 + 2);
*(s16 *)((s32)sp10 + 0x6) = t;
*(s16 *)(a1 + 0x100) = t;
*(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4);
func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10);
rv = sp20;
*a0 = rv;
rv = (s32)a0;
__asm__ __volatile__("" : : "r" (rv));
}
extern u8 D_80078EC1;
s32 func_80181C9C(void) {
return (D_80078EC1 ^ 0x15) == 0;
}
extern s32 func_8012BD14(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
/* The `register ... __asm__("$4")` pin on the FIRST call argument is load-bearing.
* The target sets $a0 = 0x6FE in the ENTRY block (dbr steals it into the `bnez`
* delay slot -- sched.md D1 backward fill), but a plain `s32 id = 0x6FE;` local is
* rematerialised at the use site (single-set constant pseudo -> REG_EQUIV), so the
* `li` sinks past the label into the join block and dbr fills the slot with the
* if-body's `lui` instead (SHIFT-DRIFT/+1). Pinning the local to $a0 makes the `li`
* a hard-reg set that stays where it is written, and the call's arg move degenerates
* to a deleted `(set (reg 4) (reg 4))`. */
void func_80181CB4(void *a0) {
register s32 id __asm__("$4");
s32 vol;
s32 t;
vol = 0x7F;
t = func_8012BD14((s32)a0);
id = 0x6FE;
if (t > 0x1000) {
vol -= (t - 0x1000) / 0x2700;
}
func_8002D4C8(id, (vol | 0x1000) & 0xFFFF);
}
File diff suppressed because it is too large Load Diff
-230
View File
@@ -4770,233 +4770,3 @@ TAIL_5DC:
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_801815E4);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_8018172C);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_801817E0);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181B7C);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181BE0);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181CAC);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181D08);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181E88);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80181F74);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182284);
extern void func_80182708(void);
extern void func_80182944(void);
void func_801822D0(s32 a0) {
func_80182708();
((void (*)(s32))func_80182944)(a0);
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182300);
void func_80182384(s32 param_1) {
extern void func_80182858(s32);
extern void func_80182944(void);
extern void func_8012DBD0(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8012CC64(s32 a0, void *a1);
extern s32 func_8012CC1C(s32 a0, void *a1);
extern s32 func_8012CBA4(s32 a0);
extern void func_8012B23C(s32 a0);
extern void func_80131C78(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80131E00(s32 a0, s32 a1);
extern s32 D_801A8340;
u8 bVar1;
s32 uVar3;
s32 pad[2];
if (0xf < *(s16 *)(param_1 + 0xa)) {
((void (*)(void *))func_80182858)((void *)param_1);
return;
}
if ((*(s32 *)(param_1 + 0x10) != 0) || (*(s32 *)(param_1 + 0x18) != 0)) {
func_8012DBD0(param_1, 0x50,
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + 0x800, 0x1D);
}
bVar1 = *(u8 *)(param_1 + 0xc2);
switch (bVar1) {
case 0:
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
uVar3 = func_8012CC64(param_1, &D_801A8340);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
*(u8 *)(param_1 + 0xc2) = 2;
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = 0xFFF30000;
*(s32 *)(param_1 + 0x1c) = 0;
}
goto LAB_80180740;
case 2: {
s32 saved14;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
saved14 = *(s32 *)(param_1 + 0x14);
uVar3 = func_8012CC64(param_1, &D_801A8340);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = saved14;
*(u8 *)(param_1 + 0xc2) = 3;
*(s32 *)(param_1 + 0x1c) = 0;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
}
goto LAB_80180740;
}
case 3:
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x10) * 15 / 16;
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0x18) * 15 / 16;
if ((*(u8 *)(param_1 + 0xc3) & 1) == 0) {
goto CASE3_CC64;
}
uVar3 = func_8012CC1C(param_1, &D_801A8340);
if ((uVar3 & 0x6000) != 0) {
goto CASE3_TAIL;
}
goto LAB_80180730;
CASE3_CC64:
uVar3 = func_8012CC64(param_1, &D_801A8340);
if ((uVar3 & 0x4000) == 0) {
goto CASE3_NO4000;
}
LAB_80180644:
func_8012B23C(param_1);
*(u8 *)(param_1 + 0xc2) = 4;
goto LAB_80180740;
CASE3_NO4000:
if ((uVar3 & 0x2000) == 0) {
goto CASE3_TAIL;
}
if ((uVar3 & 0xff) != 0x1a) {
goto CASE3_SETFLAG;
}
LAB_8018066C:
((void (*)(void *))func_80182858)((void *)param_1);
return;
CASE3_SETFLAG:
*(u8 *)(param_1 + 0xc3) = *(u8 *)(param_1 + 0xc3) | 1;
CASE3_TAIL:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x11) {
goto LAB_80180740;
}
if ((uVar3 & 0x6000) == 0) {
goto LAB_80180730;
}
goto CASE34_TAIL;
case 4:
uVar3 = func_8012CBA4(param_1);
if ((uVar3 & 0x2000) == 0) {
goto CASE4_COUNTER;
}
CASE34_TAIL:
func_80131C78(param_1);
goto LAB_80180740;
CASE4_COUNTER:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x3d) {
goto LAB_80180740;
}
goto LAB_80180730;
default:
goto LAB_80180740;
}
LAB_80180730:
func_80131E00(param_1, 0xd);
return;
LAB_80180740:
((s32 (*)(s32))func_80182944)(param_1);
return;
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182708);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_8018276C);
void func_801827B8(void *a0) {
s32 v1 = *(s32 *)((s32)a0 + 0x20);
*(s32 *)((s32)a0 + 0x1C) = 0x1E;
*(s16 *)((s32)a0 + 0x5C) = 0;
*(s16 *)(v1 + 0x10) = 0;
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_801827D0);
extern void func_80182A28(s32 arg0);
extern void func_8002A04C(s32 a0);
extern void func_80182858(s32 arg0);
void func_80182820(s32 arg0) {
func_80182A28(arg0);
((void (*)(s32))func_8002A04C)(arg0);
func_80182858(arg0);
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182858);
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C098(void *a0);
void func_8018290C(s32 param_1) {
s32 iVar1;
iVar1 = *(s32 *)(param_1 + 0xd0);
((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38);
((void (*)(s32))func_8012C098)(param_1);
}
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182944);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182A28);
INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8017C294", func_80182B20);
File diff suppressed because it is too large Load Diff
-951
View File
@@ -5662,954 +5662,3 @@ TAIL_5DC:
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_8018330C);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183454);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183508);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801838A4);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183908);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801839D4);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183A30);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183BB0);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183C9C);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80183FAC);
extern void func_80184430(s32 *a0);
extern s32 func_8018466C(s32 a0);
void func_80183FF8(s32 *a0) {
func_80184430(a0);
func_8018466C((s32)a0);
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184028);
void func_801840AC(s32 param_1) {
extern void func_80184580(s32);
extern s32 func_8018466C(s32 a0);
extern void func_8012DBD0(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8012CC64(s32 a0, void *a1);
extern s32 func_8012CC1C(s32 a0, void *a1);
extern s32 func_8012CBA4(s32 a0);
extern void func_8012B23C(s32 a0);
extern void func_80131C78(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80131E00(s32 a0, s32 a1);
extern s32 D_801AE3A8;
u8 bVar1;
s32 uVar3;
s32 pad[2];
if (0xf < *(s16 *)(param_1 + 0xa)) {
((void (*)(void *))func_80184580)((void *)param_1);
return;
}
if ((*(s32 *)(param_1 + 0x10) != 0) || (*(s32 *)(param_1 + 0x18) != 0)) {
func_8012DBD0(param_1, 0x50,
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + 0x800, 0x1D);
}
bVar1 = *(u8 *)(param_1 + 0xc2);
switch (bVar1) {
case 0:
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
uVar3 = func_8012CC64(param_1, &D_801AE3A8);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
*(u8 *)(param_1 + 0xc2) = 2;
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = 0xFFF30000;
*(s32 *)(param_1 + 0x1c) = 0;
}
goto LAB_80180740;
case 2: {
s32 saved14;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
*(s32 *)(param_1 + 0x1c) += 1;
if (0x28 < *(s32 *)(param_1 + 0x1c)) {
goto LAB_80180730;
}
saved14 = *(s32 *)(param_1 + 0x14);
uVar3 = func_8012CC64(param_1, &D_801AE3A8);
if ((uVar3 & 0x4000) != 0) {
goto LAB_80180644;
}
if ((uVar3 & 0x2000) != 0) {
if ((uVar3 & 0xff) == 0x1a) {
goto LAB_8018066C;
}
func_80143B6C(param_1, 1);
*(s32 *)(param_1 + 0x14) = saved14;
*(u8 *)(param_1 + 0xc2) = 3;
*(s32 *)(param_1 + 0x1c) = 0;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
}
goto LAB_80180740;
}
case 3:
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x10) * 15 / 16;
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0x18) * 15 / 16;
if ((*(u8 *)(param_1 + 0xc3) & 1) == 0) {
goto CASE3_CC64;
}
uVar3 = func_8012CC1C(param_1, &D_801AE3A8);
if ((uVar3 & 0x6000) != 0) {
goto CASE3_TAIL;
}
goto LAB_80180730;
CASE3_CC64:
uVar3 = func_8012CC64(param_1, &D_801AE3A8);
if ((uVar3 & 0x4000) == 0) {
goto CASE3_NO4000;
}
LAB_80180644:
func_8012B23C(param_1);
*(u8 *)(param_1 + 0xc2) = 4;
goto LAB_80180740;
CASE3_NO4000:
if ((uVar3 & 0x2000) == 0) {
goto CASE3_TAIL;
}
if ((uVar3 & 0xff) != 0x1a) {
goto CASE3_SETFLAG;
}
LAB_8018066C:
((void (*)(void *))func_80184580)((void *)param_1);
return;
CASE3_SETFLAG:
*(u8 *)(param_1 + 0xc3) = *(u8 *)(param_1 + 0xc3) | 1;
CASE3_TAIL:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x11) {
goto LAB_80180740;
}
if ((uVar3 & 0x6000) == 0) {
goto LAB_80180730;
}
goto CASE34_TAIL;
case 4:
uVar3 = func_8012CBA4(param_1);
if ((uVar3 & 0x2000) == 0) {
goto CASE4_COUNTER;
}
CASE34_TAIL:
func_80131C78(param_1);
goto LAB_80180740;
CASE4_COUNTER:
if ((*(u32 *)(param_1 + 0x1c) & 3) == 3) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x3d) {
goto LAB_80180740;
}
goto LAB_80180730;
default:
goto LAB_80180740;
}
LAB_80180730:
func_80131E00(param_1, 0xd);
return;
LAB_80180740:
func_8018466C(param_1);
return;
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184430);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184494);
void func_801844E0(void *a0) {
s32 v1 = *(s32 *)((s32)a0 + 0x20);
*(s32 *)((s32)a0 + 0x1C) = 0x1E;
*(s16 *)((s32)a0 + 0x5C) = 0;
*(s16 *)(v1 + 0x10) = 0;
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801844F8);
extern void func_80184750(s32 arg0);
extern void func_8002A04C(s32 a0);
extern void func_80184580(s32 arg0);
void func_80184548(s32 arg0) {
func_80184750(arg0);
((s32 (*)(s32))func_8002A04C)(arg0);
func_80184580(arg0);
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184580);
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C098(void *a0);
void func_80184634(s32 param_1) {
s32 iVar1;
iVar1 = *(s32 *)(param_1 + 0xd0);
((void (*)(s32 *, s32))func_80016714)((s32 *)iVar1, 0x38);
((void (*)(s32))func_8012C098)(param_1);
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_8018466C);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184750);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184848);
extern void (*D_801AEAF8[])(void);
void func_80184920(void *a0) {
D_801AEAF8[*(u16 *)((s32)a0 + 0x2)]();
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_8018495C);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801849C4);
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_80184AF8);
extern void (*D_801B267C[])(void);
void func_80184B68(void *a0) {
D_801B267C[*(u16 *)((s32)a0 + 0x2)]();
}
extern s32 func_801850C4(s32 arg0);
extern void func_8012C194(void);
extern void func_8012CAE4(void *a0);
extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80128EA8(s32 a0, s32 a1, s32 a2);
extern void func_8018511C(s32 arg0);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_80184BA4(s32 a0) {
extern u8 D_801B2630[];
extern u8 D_801B263C[];
s32 s0;
u16 t;
u16 u;
u16 v;
s0 = func_801850C4(a0);
if ((s0 == 1) || (s0 = ((s32 (*)(void))func_8012C194)(), s0 == 0)) {
((void (*)(s32))func_8012CAE4)(a0);
} else {
*(s32 *)(a0 + 0xCC) = s0;
func_8001CC3C(s0, (s32)D_801B2630, 0x214, 0x168);
*(s32 *)(s0 + 0x4) = 0x50000000;
*(u8 *)(s0 + 0x27) = 0x24;
func_80128EA8(s0, a0 + 0xDC, (s32)D_801B263C);
func_8018511C(a0);
*(u16 *)(s0 + 0x8) = *(u16 *)(a0 + 0x6);
*(u16 *)(s0 + 0xA) = *(u16 *)(a0 + 0xA);
t = *(u16 *)(a0 + 0xE);
*(u16 *)(s0 + 0x1A) = 0x2000;
*(u16 *)(s0 + 0x18) = 0x2000;
*(u16 *)(s0 + 0x2C) = 0xC010;
*(u16 *)(s0 + 0xC) = t;
v = *(u16 *)(a0 + 0x2) + 1;
u = *(u16 *)(*(s32 *)(a0 + 0x64) + 0x36);
*(s32 *)(a0 + 0x1C) = 0x180;
*(u16 *)(a0 + 0x2) = v;
*(u16 *)(a0 + 0x10A) = u;
func_8002D4C8(0xAA0, 0);
}
}
extern s32 rand(void);
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern s32 func_80132EF4(s32 a0, s32 a1);
extern s32 func_8012BEE8(s32 a0);
extern void func_8018511C(s32 arg0);
extern void func_80185198(void *arg0);
void func_80184CA0(s32 arg0) {
s32 p;
s32 q;
s32 r;
s32 t0;
s32 u0;
s32 t1;
s32 u1;
s32 t2;
s32 t3;
s32 t4;
u16 v;
u16 w;
p = *(s32 *)(arg0 + 0x64);
if (*(s16 *)(arg0 + 0x10A) == *(s16 *)(p + 0x36) && *(s16 *)(p + 0x76) > 0) {
if (*(s32 *)(arg0 + 0x1C) == (*(s32 *)(arg0 + 0x1C) / 0x30) * 0x30 &&
*(u8 *)(p + 0xC1) == 0) {
*(s16 *)(p + 0x60) = 0xA;
*(u16 *)(p + 0x5C) |= 1;
v = *(u16 *)(*(s32 *)(p + 0x20) + 0x12);
*(s16 *)(p + 0x5E) = 1;
*(u16 *)(p + 0x62) = v + 0x800;
*(u16 *)(p + 0x7C) = *(u16 *)(arg0 + 0x6);
*(u16 *)(p + 0x7E) = *(u16 *)(arg0 + 0xA);
*(u16 *)(p + 0x80) = *(u16 *)(arg0 + 0xE);
}
if ((*(s32 *)(arg0 + 0x1C) & 7) == 0) {
q = func_80132EF4(arg0, 0x22);
if (q != 0) {
t0 = rand();
u0 = *(u16 *)(q + 0x6) - 0x10;
*(u16 *)(q + 0x6) = u0 + (t0 & 0x1F);
t1 = rand();
u1 = *(u16 *)(q + 0xE) - 0x10;
*(u16 *)(q + 0xE) = u1 + (t1 & 0x1F);
*(u16 *)(q + 0xA) -= 0x20;
t2 = rand();
*(s32 *)(q + 0x14) = -0x40000 - ((t2 % 3) << 16);
t3 = rand();
t4 = rand();
*(s16 *)(q + 0x34) = ((t3 % 0x1800 + 0x1000) & ~0xF) | (t4 & 1);
*(u16 *)(*(s32 *)(q + 0x20) + 0x2C) = 0xC010;
*(s32 *)(*(s32 *)(q + 0x20) + 0x4) |= 0x40000000;
}
}
r = *(s32 *)(arg0 + 0xCC);
if (r != 0) {
func_80128ED8((void *)r, (void *)(arg0 + 0xDC));
func_8018511C(arg0);
*(u16 *)(r + 0x8) = *(u16 *)(arg0 + 0x6);
*(u16 *)(r + 0xA) = *(u16 *)(arg0 + 0xA);
w = *(u16 *)(arg0 + 0xE);
*(u16 *)(r + 0x18) += 0x15;
*(u16 *)(r + 0x1A) += 0x15;
*(u16 *)(r + 0xC) = w;
}
if (*(u16 *)(p + 0x5E) == 0x23) {
*(u16 *)(arg0 + 0x2) += 1;
}
if (func_8012BEE8(arg0) == 0) {
return;
}
}
func_80185198((void *)arg0);
}
extern s32 rand(void);
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern s32 func_80132EF4(s32 a0, s32 a1);
extern void func_8018511C(s32 arg0);
extern void func_80185198(void *arg0);
void func_80184F30(s32 arg0) {
extern u16 D_800B99DA;
s32 p;
s32 q;
s32 t0;
s32 u0;
s32 t1;
s32 u1;
s32 t2;
p = *(s32 *)(arg0 + 0xCC);
if (p != 0) {
func_80128ED8((void *)p, (void *)(arg0 + 0xDC));
func_8018511C(arg0);
*(u16 *)(p + 0x8) = *(u16 *)(arg0 + 0x6);
*(u16 *)(p + 0xA) = *(u16 *)(arg0 + 0xA);
*(u16 *)(p + 0xC) = *(u16 *)(arg0 + 0xE);
*(u16 *)(p + 0x18) -= 0x200;
*(u16 *)(p + 0x1A) -= 0x200;
if (*(s16 *)(p + 0x18) >= 0) {
if (D_800B99DA % 5 == 0) {
q = func_80132EF4(arg0, 0x22);
if (q != 0) {
t0 = rand();
u0 = *(u16 *)(q + 0x6) - 0x10;
*(u16 *)(q + 0x6) = u0 + (t0 & 0x1F);
t1 = rand();
u1 = *(u16 *)(q + 0xE) - 0x10;
*(u16 *)(q + 0xE) = u1 + (t1 & 0x1F);
*(u16 *)(q + 0xA) -= 0x20;
t2 = rand();
*(s32 *)(q + 0x14) = -0x40000 - ((t2 % 4) << 16);
*(s16 *)(q + 0x34) = rand() % 0x1800 + 0x2000;
*(u16 *)(*(s32 *)(q + 0x20) + 0x2C) = 0xC010;
}
}
return;
}
}
func_80185198((void *)arg0);
}
/* func_801850C4 — "is another entity of type 0x35C sharing my 0x64 owner?"
*
* Walks the 0x60-entry entity table at D_801202A0 (stride 0x10C) with an int
* counter (the target keeps the count in $a2 and `slti ...,0x60`, so it is a
* counted loop, NOT the D_80126720 pointer-bound idiom the sibling walkers
* use). Returns 1 for the first entry whose u16 kind == 0x35C, whose word at
* 0x64 equals the caller's word at 0x64, and which is not the caller itself.
*/
s32 func_801850C4(s32 arg0) {
extern u8 D_801202A0[];
u8 *p;
s32 i;
p = D_801202A0;
for (i = 0; i < 0x60; i++) {
if (*(u16 *)p == 0x35C && *(s32 *)(arg0 + 0x64) == *(s32 *)(p + 0x64) &&
arg0 != (s32)p) {
return 1;
}
p += 0x10C;
}
return 0;
}
extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
void func_8018511C(s32 arg0) {
s32 buf[8];
u16 out[4];
s32 p;
p = *(s32 *)(arg0 + 0x64);
if (*(s16 *)(p + 0x36) == *(s16 *)(arg0 + 0x10A)) {
func_8012EC04(p, *(s16 *)(arg0 + 0xFC), buf);
((void (*)(s32 *, s32, u16 *))func_8012F14C)(buf, arg0 + 0x88, out);
*(u16 *)(arg0 + 0x6) = out[0];
*(u16 *)(arg0 + 0xA) = out[1];
*(u16 *)(arg0 + 0xE) = out[2];
}
}
/* func_80185198 — guard-then-free tail (cookbook §71 sibling shape:
* src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.c func_80144458 tail, and
* src/ov_SC03_099/ov_SC03_099_jr_80140608.c:2432 func_80016714(x, 0x38)). */
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C218(void *a0);
void func_80185198(void *arg0) {
void *temp_a0;
temp_a0 = *(void **)((char *)arg0 + 0xCC);
if (temp_a0 != NULL) {
func_80016714(temp_a0, 0x38);
}
func_8012C218(arg0);
}
/* Sibling shape: DEFINE_func_80143BDC() in src/shared/engine_core.h (cookbook §71) */
extern s32 func_8012C51C(void *a0, s32 a1);
void func_801851DC(s32 a0, u16 *a1, s16 a2) {
struct S80190C84 sp;
u16 t;
sp.f0 = a1[0];
sp.f2 = a1[1];
t = a1[2];
sp.f6 = 0x35C;
sp.fA = 0;
sp.f8 = 0;
sp.fE = a2;
sp.f10 = 0;
sp.fC = 0x7FFF;
sp.f4 = t;
func_8012C51C(&sp, a0);
}
extern void (*D_801B29B8[])(void);
void func_8018523C(void *a0) {
D_801B29B8[*(u16 *)((s32)a0 + 0x2)]();
}
/* Declarations conform VERBATIM to the ones already present in
* src/ov_SC03_014/ov_SC03_014_jr_801848E4.c (lines 58, 2524, 2527, 3139,
* 3222, 3244, 3245). Type mismatches are resolved by casting AT THE USE. */
extern s32 func_8012C354(s32 a0, s32 a1);
extern s32 func_80029178(s32 arg);
extern s32 func_801788B8(s32 arg0, s32 arg1);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_8012CAE4(void *a0);
extern void func_8012A828(s32*, s32);
/* not declared anywhere in the TU */
extern void func_80185924(void);
void func_80185278(void *a0) {
extern s32 D_801B2710[];
extern u8 D_801B26A8[];
extern u8 D_80185D94[];
s32 res1, res2, arr_elem;
void *ptr;
u16 idx;
s16 val;
res1 = func_8012C354((s32)a0, (s32)D_801B26A8);
if (res1 == 0) {
return;
}
ptr = *(void **)((s32)a0 + 0xDC);
idx = *(u16 *)((s32)ptr + 0xA);
arr_elem = D_801B2710[idx];
res1 = func_80029178(arr_elem);
if ((res1 & 0xFF) == 0) {
res2 = func_801788B8((s32)a0, (s32)func_80185924);
*(s32 *)((s32)a0 + 0xCC) = res2;
} else {
val = *(s16 *)((s32)a0 + 0x70);
val |= 0x4000;
*(s16 *)((s32)a0 + 0x70) = val;
}
res2 = func_8012C658(0x8F, *(s16 *)((s32)a0 + 0x70), (s32)a0);
*(s32 *)((s32)a0 + 0x6C) = res2;
if (res2 == 0) {
func_8012CAE4(a0);
} else {
((void (*)(s32, void *))func_8012A828)((s32)a0, D_80185D94);
*(u16 *)((s32)a0 + 0x2) = 1;
}
}
s32 func_8018534C(void *a0) {
void *p1, *p2;
u16 val;
long x;
p1 = *(void **)(a0 + 0x20);
p2 = *(void **)(a0 + 0x6C);
val = *(u16 *)(p1 + 0x12);
p2 = *(void **)(p2 + 0x20);
val += 0x800;
val &= 0xFFF;
*(u16 *)(p2 + 0x12) = val;
x = 2;
*(u16 *)(a0 + 0x2) = x;
return x;
}
void func_80185374(void) {
}
/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c
* (func_80029178 @ line 58/3176, func_80029124 @ line 43/3253,
* func_80178CBC @ line 2537). The D_801E3* globals are not declared
* anywhere in the TU. */
extern s32 func_80029178(s32 arg);
extern void func_80029124(s32 a0, s32 a1);
extern void func_80178CBC(s32 arg0, s32 arg1);
void func_8018537C(void *a0) {
extern s32 D_801B28F4;
extern s32 D_801B28E0;
extern s32 D_801B28DC;
extern s32 D_801B2974;
extern s32 D_801B2908;
extern s32 D_801B27D4[];
extern s32 D_801B2858[];
s32 *s0;
s32 *p;
u16 v0;
s0 = *(s32 **)((char *)a0 + 0xDC);
v0 = *(u16 *)((char *)s0 + 0x8);
if (!(v0 & 0x8000)) {
v0 = (func_80029178(0x1D)) & 0xFF;
if (v0 != 0) {
u16 flags2;
D_801B28F4 = *(s32 *)((char *)s0 + 0x4);
flags2 = *(u16 *)((char *)s0 + 0x8);
if (!(flags2 & 0x4000)) {
v0 = *(u16 *)((char *)s0 + 0xC);
D_801B28DC = 0;
D_801B28E0 = D_801B2858[v0];
} else {
D_801B28E0 = 0;
v0 = *(u16 *)((char *)s0 + 0xC);
func_80029124(D_801B2858[v0], 1);
D_801B28DC = 2;
}
} else {
D_801B28F4 = *(s32 *)((char *)s0 + 0x0);
v0 = *(u16 *)((char *)s0 + 0xC);
D_801B28DC = 0;
D_801B28E0 = D_801B27D4[v0];
}
func_80178CBC((s32)a0, (s32)&D_801B2908);
} else {
p = &D_801B2974;
*p = *(s32 *)((char *)s0 + 0x0);
func_80178CBC((s32)a0, (s32)(p - 7));
}
*(u16 *)(a0 + 0x2) = 4;
*(u16 *)(a0 + 0x70) |= 0x8000;
}
/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c
* (lines 43, 45, 58, 65, 2528, 2538, 2712, 3177, 3282).
* Type mismatches resolved by casting AT THE USE (func_80178D18). */
extern s32 func_801789AC(s32 arg0);
extern void func_80178D18(void);
extern s32 func_80029178(s32 arg);
extern void func_80029514(s32);
extern void func_80029124(s32, s32);
extern void func_80145EE8(s32 param_1);
extern void func_8012C218(void *a0);
extern s32 func_801856CC(void);
void func_801854C8(void *arg0) {
extern s32 D_801B2710[];
extern void func_8002AC00(s32 arg0); /* not declared anywhere in the TU */
s32 ptr;
ptr = *(s32 *)((s32)arg0 + 0xDC);
if (func_801789AC((s32)arg0) != 0) {
((void (*)(void *))func_80178D18)(arg0);
if ((u8)func_80029178(D_801B2710[*(u16 *)(ptr + 0xA)]) != 0) {
if (D_801B2710[*(u16 *)(ptr + 0xA)] == 0x54) {
func_80029514(0x5A);
func_80029124(0xEA, 1);
}
if ((*(u16 *)(ptr + 0x8) & 0x4000) != 0) {
if ((u8)func_80029178(0x1D) != 0) {
func_80145EE8(0);
}
}
if (func_801856CC() == 1) {
func_8002AC00(0x26);
}
*(u16 *)((s32)arg0 + 0x70) &= 0x8000;
func_8012C218(*(void **)((s32)arg0 + 0xCC));
}
*(u16 *)((s32)arg0 + 0x2) = 2;
}
}
extern void func_8012C218(void *a0);
s32 func_801855E8(void * arg0)
{
*(short *)((char *)arg0 + 0x2) = 2;
((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc));
}
void func_80185614(void *a0) {
*(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 1;
}
void func_80185624(void *a0) {
*(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 2;
}
extern void func_80029124(s32, s32);
void func_80185634(void *a0) {
extern s32 D_801B2710[];
u16 idx = *(u16 *)(*(s32 *)(a0 + 0xDC) + 0xA);
func_80029124(D_801B2710[idx], 1);
}
extern s32 D_80126B58;
extern void func_8014ADA8(s32 a0, s32 a1);
void func_80185674(void * arg0) {
s32 temp_v0;
temp_v0 = *(s32 *)((s32)arg0 + 0xdc);
((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc));
}
extern s16 func_80174764(void);
s32 func_801856A8(void) {
return ((s32 (*)(void))func_80174764)() == 1;
}
extern s32 func_80029178(s32 arg);
s32 func_801856CC(void) {
extern s32 D_801B2710[];
s32 i;
for (i = 0; i < 0x26; i++) {
if ((u8)func_80029178(D_801B2710[i]) == 0) {
return 0;
}
}
return 1;
}
extern void (*D_801B29E0[])(void);
void func_80185730(void *a0) {
D_801B29E0[*(u16 *)((s32)a0 + 0x2)]();
}
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32*, s32);
void func_8018576C(void *a0) {
extern u8 D_801B26DC[];
extern u8 D_801B30A0[];
extern u8 D_801B2E80[];
s32 ptr;
unsigned short v1;
unsigned short v0;
if (func_8012C354((s32)a0, (s32)D_801B26DC) == 0) {
return;
}
ptr = *(s32 *)((s32)a0 + 0x64);
v1 = *(unsigned short *)(ptr + 0x36);
v0 = *(unsigned short *)((s32)a0 + 0x70);
*(unsigned short *)((s32)a0 + 0xFC) = v1;
if (v0 & 0x4000) {
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B30A0);
*(unsigned short *)((s32)a0 + 0x5C) = 0;
} else {
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B2E80);
}
*(unsigned short *)((s32)a0 + 0x2) = 1;
}
extern void func_8012C218(void *a0);
extern void func_8012A828(s32*, s32);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_801857F4(void *a0) {
extern u8 D_801B2E90[];
extern u8 D_801B2F98[];
s16 mode;
if (*(s16 *)((s32)a0 + 0xFC) != *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36)) {
((void (*)(void))func_8012C218)();
return;
}
mode = *(s16 *)((s32)a0 + 0xFE);
if (mode == 1) {
*(s16 *)((s32)a0 + 0x2) = 2;
*(s32 *)((s32)a0 + 0x1C) = 0x20;
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B2E90);
*(s16 *)((s32)a0 + 0x5C) = 0;
func_8002D4C8(0x5BF, 0);
} else if (mode == 2) {
*(s16 *)((s32)a0 + 0x2) = 2;
*(s32 *)((s32)a0 + 0x1C) = 0x20;
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B2F98);
*(u16 *)((s32)a0 + 0x5C) = 0x8C00;
}
}
/* func_801858B4 — guarded state-kick: if the s16 at 0x98 is clear, set the
* state word at 0x02 to 1, hand the entity to func_8012A828 with one of two
* script tables selected by the s16 flag at 0xFE (== 1 -> D_801B30A0, else
* D_801B2E80), then clear that flag.
*
* §71 sibling-first: func_8018A06C (same TU, 0x148 bytes earlier) is the same
* two-arm `((void (*)(s32, void *))func_8012A828)(entity, D_801B30A0 / D_801B2E80)` selector and pins
* the widths: `lh` at 0x98/0xFE, `sh` at 0x02.
*/
extern void func_8012A828(s32*, s32);
void func_801858B4(void *a0) {
extern u8 D_801B30A0[];
extern u8 D_801B2E80[];
if (*(s16 *)((s32)a0 + 0x98) == 0) {
*(s16 *)((s32)a0 + 0x2) = 1;
if (*(s16 *)((s32)a0 + 0xFE) == 1) {
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B30A0);
} else {
((void (*)(s32, void *))func_8012A828)((s32)a0, D_801B2E80);
}
*(s16 *)((s32)a0 + 0xFE) = 0;
}
}
extern s32 *D_80126B78;
extern u8 D_801B29D0[];
extern s32 func_8012BDBC(s32 a0, s32 a1);
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80172710(void);
extern s32 func_80178BF8();
#define gte_SetRotMatrix(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define gte_SetTransMatrix(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
s32 aF8018A224() __asm__("func_80185924");
s32 aF8018A224(param_1)
void *param_1;
{
s32 *m;
s32 obj;
s32 sv0[2];
s32 sv1[2];
s32 flag;
m = (s32 *)((u8 *)D_80126B78 + 0x34);
obj = *(s32 *)((s32)param_1 + 0x64);
gte_SetRotMatrix(m);
gte_SetTransMatrix(m);
RotTransSV(D_801B29D0, sv0, &flag);
RotTransSV(D_801B29D0 + 8, sv1, &flag);
if (func_80135888(*(s32 *)(obj + 0x20), *(s32 *)(obj + 0x58), (s32)sv0, (s32)sv1) == 0) {
return 0;
}
if (func_8012BDBC(obj, 0x300) == 0) {
return 0;
}
*(s16 *)(obj + 0x2) = 3;
func_80178BF8();
return (s32)func_80172710;
}
File diff suppressed because it is too large Load Diff