mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-01 07:40:42 -04:00
feat(decomp): parallel gate — 9 fns across 6 binaries (8 workers)
ov_SC06_024 func_8017EC4C ov_SC06_029 func_8017F9C0 ov_SC03_105 func_801867D0 ov_SC05_010 func_80180F84 ov_SC02_005 func_80185060 func_80185E80 ov_SC02_011 func_80183630 func_8018418C func_80188E3C
This commit is contained in:
+7
-5
@@ -868,7 +868,7 @@ ov_SC02_005_ELF := $(ov_SC02_005_OUT).elf
|
||||
ov_SC02_005_MAPFILE := $(ov_SC02_005_OUT).map
|
||||
ov_SC02_005_LD_SCRIPT := $(ov_SC02_005_OUT).ld
|
||||
ov_SC02_005_SPLAT_YAML := config/splat.ov_SC02_005.yaml
|
||||
ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005.o,ov_SC02_005_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_80135888.o,tail3.data.o,ov_SC02_005_jr_80135A4C.o,tail4.data.o,ov_SC02_005_jr_80135D20.o,tail5.data.o,ov_SC02_005_jr_801380E0.o,ov_SC02_005_o0c.o,tail6.data.o,ov_SC02_005_jr_8013F350.o,tail7.data.o,ov_SC02_005_jr_8013FFD8.o,tail8.data.o,ov_SC02_005_jr_80140608.o,tail9.data.o,ov_SC02_005_jr_8015444C.o,ov_SC02_005_jr_80154C24.o,ov_SC02_005_jr_801588CC.o,ov_SC02_005_jr_80159C84.o,tail10.data.o,ov_SC02_005_jr_8015A3C8.o,tail11.data.o,ov_SC02_005_jr_8015AE2C.o,tail12.data.o,ov_SC02_005_jr_8015C32C.o,tail13.data.o,ov_SC02_005_jr_8016AB6C.o,tail14.data.o,ov_SC02_005_jr_80171B4C.o,ov_SC02_005_jr_801734BC.o,tail15.data.o,ov_SC02_005_jr_801789AC.o,ov_SC02_005_jr_80178D40.o,tail16.data.o,ov_SC02_005_jr_8017A4AC.o,tail17.data.o,ov_SC02_005_jr_8017AE2C.o,tail18.data.o,ov_SC02_005_jr_8017CF90.o,tail19.data.o,ov_SC02_005_jr_80181984.o,ov_SC02_005_jr_80181D30.o,tail20.data.o,ov_SC02_005_jr_8018EA04.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005.o,ov_SC02_005_jr_8012ACE0.o,tail2.data.o,ov_SC02_005_jr_80135888.o,tail3.data.o,ov_SC02_005_jr_80135A4C.o,tail4.data.o,ov_SC02_005_jr_80135D20.o,tail5.data.o,ov_SC02_005_jr_801380E0.o,ov_SC02_005_o0c.o,tail6.data.o,ov_SC02_005_jr_8013F350.o,tail7.data.o,ov_SC02_005_jr_8013FFD8.o,tail8.data.o,ov_SC02_005_jr_80140608.o,tail9.data.o,ov_SC02_005_jr_8015444C.o,ov_SC02_005_jr_80154C24.o,ov_SC02_005_jr_801588CC.o,ov_SC02_005_jr_80159C84.o,tail10.data.o,ov_SC02_005_jr_8015A3C8.o,tail11.data.o,ov_SC02_005_jr_8015AE2C.o,tail12.data.o,ov_SC02_005_jr_8015C32C.o,tail13.data.o,ov_SC02_005_jr_8016AB6C.o,tail14.data.o,ov_SC02_005_jr_80171B4C.o,ov_SC02_005_jr_801734BC.o,tail15.data.o,ov_SC02_005_jr_801789AC.o,ov_SC02_005_jr_80178D40.o,tail16.data.o,ov_SC02_005_jr_8017A4AC.o,tail17.data.o,ov_SC02_005_jr_8017AE2C.o,tail18.data.o,ov_SC02_005_jr_8017CF90.o,tail19.data.o,ov_SC02_005_jr_80181984.o,ov_SC02_005_jr_80181D30.o,tail20.data.o,ov_SC02_005_jr_80185060.o,tail21.data.o,ov_SC02_005_jr_80185E80.o,tail22.data.o,ov_SC02_005_jr_8018EA04.o,tail23.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC02_005/ov_SC02_005.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC02_005/ov_SC02_005_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC02_005/ov_SC02_005_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -903,7 +903,7 @@ ov_SC02_011_ELF := $(ov_SC02_011_OUT).elf
|
||||
ov_SC02_011_MAPFILE := $(ov_SC02_011_OUT).map
|
||||
ov_SC02_011_LD_SCRIPT := $(ov_SC02_011_OUT).ld
|
||||
ov_SC02_011_SPLAT_YAML := config/splat.ov_SC02_011.yaml
|
||||
ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011.o,ov_SC02_011_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_80135888.o,tail3.data.o,ov_SC02_011_jr_80135A4C.o,tail4.data.o,ov_SC02_011_jr_80135D20.o,tail5.data.o,ov_SC02_011_jr_801380E0.o,ov_SC02_011_o0c.o,tail6.data.o,ov_SC02_011_jr_8013F350.o,tail7.data.o,ov_SC02_011_jr_8013FFD8.o,tail8.data.o,ov_SC02_011_jr_80140608.o,tail9.data.o,ov_SC02_011_jr_8015444C.o,ov_SC02_011_jr_80154C24.o,ov_SC02_011_jr_801588CC.o,ov_SC02_011_jr_80159C84.o,tail10.data.o,ov_SC02_011_jr_8015A3C8.o,tail11.data.o,ov_SC02_011_jr_8015AE2C.o,tail12.data.o,ov_SC02_011_jr_8015C32C.o,tail13.data.o,ov_SC02_011_jr_8016AB6C.o,tail14.data.o,ov_SC02_011_jr_80171B4C.o,ov_SC02_011_jr_801734BC.o,tail15.data.o,ov_SC02_011_jr_801789AC.o,ov_SC02_011_jr_80178D40.o,tail16.data.o,ov_SC02_011_jr_8017A4AC.o,tail17.data.o,ov_SC02_011_jr_8017AE2C.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011.o,ov_SC02_011_jr_8012ACE0.o,tail2.data.o,ov_SC02_011_jr_80135888.o,tail3.data.o,ov_SC02_011_jr_80135A4C.o,tail4.data.o,ov_SC02_011_jr_80135D20.o,tail5.data.o,ov_SC02_011_jr_801380E0.o,ov_SC02_011_o0c.o,tail6.data.o,ov_SC02_011_jr_8013F350.o,tail7.data.o,ov_SC02_011_jr_8013FFD8.o,tail8.data.o,ov_SC02_011_jr_80140608.o,tail9.data.o,ov_SC02_011_jr_8015444C.o,ov_SC02_011_jr_80154C24.o,ov_SC02_011_jr_801588CC.o,ov_SC02_011_jr_80159C84.o,tail10.data.o,ov_SC02_011_jr_8015A3C8.o,tail11.data.o,ov_SC02_011_jr_8015AE2C.o,tail12.data.o,ov_SC02_011_jr_8015C32C.o,tail13.data.o,ov_SC02_011_jr_8016AB6C.o,tail14.data.o,ov_SC02_011_jr_80171B4C.o,ov_SC02_011_jr_801734BC.o,tail15.data.o,ov_SC02_011_jr_801789AC.o,ov_SC02_011_jr_80178D40.o,tail16.data.o,ov_SC02_011_jr_8017A4AC.o,tail17.data.o,ov_SC02_011_jr_8017AE2C.o,tail18.data.o,ov_SC02_011_jr_80183178.o,tail19.data.o,ov_SC02_011_jr_80188E3C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC02_011/ov_SC02_011.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -917,6 +917,8 @@ build/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14,+0x2c
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_80183178.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x30
|
||||
build/src/ov_SC02_011/ov_SC02_011_jr_80188E3C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC02_011/ov_SC02_011_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC02_011_CHECK_SHA := config/check.ov_SC02_011.sha
|
||||
ov_SC02_011_SYMBOLS := config/symbols.ov_SC02_011.txt
|
||||
@@ -2414,7 +2416,7 @@ ov_SC03_105_ELF := $(ov_SC03_105_OUT).elf
|
||||
ov_SC03_105_MAPFILE := $(ov_SC03_105_OUT).map
|
||||
ov_SC03_105_LD_SCRIPT := $(ov_SC03_105_OUT).ld
|
||||
ov_SC03_105_SPLAT_YAML := config/splat.ov_SC03_105.yaml
|
||||
ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105.o,ov_SC03_105_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_80135888.o,tail3.data.o,ov_SC03_105_jr_80135A4C.o,tail4.data.o,ov_SC03_105_jr_80135D20.o,tail5.data.o,ov_SC03_105_jr_801380E0.o,ov_SC03_105_o0c.o,tail6.data.o,ov_SC03_105_jr_8013F350.o,tail7.data.o,ov_SC03_105_jr_8013FFD8.o,tail8.data.o,ov_SC03_105_jr_80140608.o,tail9.data.o,ov_SC03_105_jr_8015444C.o,ov_SC03_105_jr_80154C24.o,ov_SC03_105_jr_801588CC.o,ov_SC03_105_jr_80159C84.o,tail10.data.o,ov_SC03_105_jr_8015A3C8.o,tail11.data.o,ov_SC03_105_jr_8015AE2C.o,tail12.data.o,ov_SC03_105_jr_8015C32C.o,tail13.data.o,ov_SC03_105_jr_8016AB6C.o,tail14.data.o,ov_SC03_105_jr_80171B4C.o,ov_SC03_105_jr_801734BC.o,tail15.data.o,ov_SC03_105_jr_801789AC.o,ov_SC03_105_jr_80178D40.o,tail16.data.o,ov_SC03_105_jr_8017A4AC.o,tail17.data.o,ov_SC03_105_jr_8017AE2C.o,tail18.data.o,ov_SC03_105_jr_8017C8D0.o,tail19.data.o,ov_SC03_105_jr_80186B24.o,ov_SC03_105_jr_80186DDC.o,tail20.data.o,ov_SC03_105_jr_80189798.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105.o,ov_SC03_105_jr_8012ACE0.o,tail2.data.o,ov_SC03_105_jr_80135888.o,tail3.data.o,ov_SC03_105_jr_80135A4C.o,tail4.data.o,ov_SC03_105_jr_80135D20.o,tail5.data.o,ov_SC03_105_jr_801380E0.o,ov_SC03_105_o0c.o,tail6.data.o,ov_SC03_105_jr_8013F350.o,tail7.data.o,ov_SC03_105_jr_8013FFD8.o,tail8.data.o,ov_SC03_105_jr_80140608.o,tail9.data.o,ov_SC03_105_jr_8015444C.o,ov_SC03_105_jr_80154C24.o,ov_SC03_105_jr_801588CC.o,ov_SC03_105_jr_80159C84.o,tail10.data.o,ov_SC03_105_jr_8015A3C8.o,tail11.data.o,ov_SC03_105_jr_8015AE2C.o,tail12.data.o,ov_SC03_105_jr_8015C32C.o,tail13.data.o,ov_SC03_105_jr_8016AB6C.o,tail14.data.o,ov_SC03_105_jr_80171B4C.o,ov_SC03_105_jr_801734BC.o,tail15.data.o,ov_SC03_105_jr_801789AC.o,ov_SC03_105_jr_80178D40.o,tail16.data.o,ov_SC03_105_jr_8017A4AC.o,tail17.data.o,ov_SC03_105_jr_8017AE2C.o,tail18.data.o,ov_SC03_105_jr_8017C8D0.o,tail19.data.o,ov_SC03_105_jr_8018624C.o,tail20.data.o,ov_SC03_105_jr_80186B24.o,ov_SC03_105_jr_80186DDC.o,tail21.data.o,ov_SC03_105_jr_80189798.o,tail22.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC03_105/ov_SC03_105.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC03_105/ov_SC03_105_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC03_105/ov_SC03_105_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -3887,7 +3889,7 @@ ov_SC05_010_ELF := $(ov_SC05_010_OUT).elf
|
||||
ov_SC05_010_MAPFILE := $(ov_SC05_010_OUT).map
|
||||
ov_SC05_010_LD_SCRIPT := $(ov_SC05_010_OUT).ld
|
||||
ov_SC05_010_SPLAT_YAML := config/splat.ov_SC05_010.yaml
|
||||
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,ov_SC05_010_jr_8018473C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80180F84.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,ov_SC05_010_jr_8018473C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC05_010/ov_SC05_010.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC05_010/ov_SC05_010_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -4593,7 +4595,7 @@ build/src/ov_SC06_029/ov_SC06_029_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
|
||||
build/src/ov_SC06_029/ov_SC06_029_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC06_029/ov_SC06_029_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC06_029/ov_SC06_029_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
|
||||
build/src/ov_SC06_029/ov_SC06_029_jr_8017C954.o: JTBL_PADS := 0,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x58
|
||||
build/src/ov_SC06_029/ov_SC06_029_jr_8017C954.o: JTBL_PADS := 0,0,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x58,+0x90
|
||||
build/src/ov_SC06_029/ov_SC06_029_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC06_029_CHECK_SHA := config/check.ov_SC06_029.sha
|
||||
ov_SC06_029_SYMBOLS := config/symbols.ov_SC06_029.txt
|
||||
|
||||
@@ -180,8 +180,12 @@ segments:
|
||||
- [0xbacc8, .rodata, ov_SC02_005_jr_80181984] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbace0, .rodata, ov_SC02_005_jr_80181D30] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbad18, data, tail20]
|
||||
- [0xbad20, .rodata, ov_SC02_005_jr_80185060] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbad44, data, tail21]
|
||||
- [0xbad78, .rodata, ov_SC02_005_jr_80185E80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbad98, data, tail22]
|
||||
- [0xbae10, .rodata, ov_SC02_005_jr_8018EA04] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xbae38, data, tail21]
|
||||
- [0xbae38, data, tail23]
|
||||
- [0xBCB00, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xBCB01] # 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
|
||||
|
||||
@@ -173,6 +173,10 @@ segments:
|
||||
- [0xc1c04, data, tail17]
|
||||
- [0xc1c08, .rodata, ov_SC02_011_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xc1c48, data, tail18]
|
||||
- [0xc1c88, .rodata, ov_SC02_011_jr_80183178] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xc1cd8, data, tail19]
|
||||
- [0xc1ce4, .rodata, ov_SC02_011_jr_80188E3C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xc1d10, data, tail20]
|
||||
- [0xC3924, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xC3927] # 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
|
||||
|
||||
@@ -173,11 +173,13 @@ segments:
|
||||
- [0x8fe70, data, tail18]
|
||||
- [0x8ffa8, .rodata, ov_SC03_105_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x8fff4, data, tail19]
|
||||
- [0x90120, .rodata, ov_SC03_105_jr_8018624C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x90134, data, tail20]
|
||||
- [0x90138, .rodata, ov_SC03_105_jr_80186B24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x90160, .rodata, ov_SC03_105_jr_80186DDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x90188, data, tail20]
|
||||
- [0x90188, data, tail21]
|
||||
- [0x90190, .rodata, ov_SC03_105_jr_80189798] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x901a4, data, tail21]
|
||||
- [0x901a4, data, tail22]
|
||||
- [0x94BC4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0x94BC7] # 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
|
||||
|
||||
@@ -121,6 +121,7 @@ segments:
|
||||
- [0x52354, c, ov_SC05_010_jr_8017A4AC]
|
||||
- [0x52cd4, c, ov_SC05_010_jr_8017AE2C]
|
||||
- [0x54778, c, ov_SC05_010_jr_8017C8D0]
|
||||
- [0x58e2c, c, ov_SC05_010_jr_80180F84]
|
||||
- [0x59b84, c, ov_SC05_010_jr_80181CDC]
|
||||
- [0x5c5e4, c, ov_SC05_010_jr_8018473C]
|
||||
- [0x607fc, data, tail]
|
||||
@@ -167,6 +168,7 @@ segments:
|
||||
- [0x9d80c, data, tail18]
|
||||
- [0x9d944, .rodata, ov_SC05_010_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9d9a4, data, tail19]
|
||||
- [0x9d9d4, .rodata, ov_SC05_010_jr_80180F84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9d9f4, .rodata, ov_SC05_010_jr_80181CDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0x9da28, data, tail20]
|
||||
- [0x9da34, .rodata, ov_SC05_010_jr_8018473C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
|
||||
@@ -164,7 +164,7 @@ segments:
|
||||
- [0xb3468, .rodata, ov_SC06_029_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb347c, data, tail18]
|
||||
- [0xb35b4, .rodata, ov_SC06_029_jr_8017C954] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb3640, data, tail19]
|
||||
- [0xb3678, data, tail19]
|
||||
- [0xBA034, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xBA037] # 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
|
||||
|
||||
@@ -2,7 +2,67 @@
|
||||
#include "../shared/engine_core.h"
|
||||
#include "ov_SC02_005_shared.h"
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80185060", func_80185060);
|
||||
#include "common.h"
|
||||
|
||||
extern void func_80187280(s32 a0, s32 a1);
|
||||
extern void func_80189F64(void);
|
||||
extern void func_801876B0(s32 arg0);
|
||||
extern void func_80187664(s32 arg0);
|
||||
extern void func_8012AD44(s32 *a0, s16 a1);
|
||||
extern u16 D_801E4BBC;
|
||||
extern s32 D_801E43D0[];
|
||||
|
||||
void func_80185060(s32 a0, s32 a1)
|
||||
{
|
||||
u16 t;
|
||||
s32 flag;
|
||||
|
||||
t = *(u16 *)(a0 + 0x70) + 1;
|
||||
func_80187280(a0, t);
|
||||
*(u8 *)(a0 + 0xC1) = 0;
|
||||
*(s32 *)(a0 + 0xDC) = 1;
|
||||
if (*(s16 *)(a0 + 0x104) == 0) {
|
||||
*(s16 *)(a0 + 0x104) = (s16)a1;
|
||||
}
|
||||
|
||||
flag = 0;
|
||||
switch ((s16)(*(u16 *)(a0 + 0x70) - 3)) {
|
||||
case 0:
|
||||
*(u32 *)(*(s32 *)(a0 + 0xCC) + 0xE8) |= 0x2000;
|
||||
func_80189F64();
|
||||
flag = 1;
|
||||
break;
|
||||
case 5:
|
||||
case 7:
|
||||
*(u16 *)(D_801E43D0[*(s16 *)(a0 + 0x70)] + 0x5C) = 0x8800;
|
||||
break;
|
||||
case 6:
|
||||
*(u32 *)(*(s32 *)(a0 + 0x64) + 0xE8) |= 0x20000;
|
||||
break;
|
||||
case 8:
|
||||
*(u32 *)(*(s32 *)(a0 + 0x64) + 0xE8) |= 0x40000;
|
||||
break;
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
*(s16 *)(a0 + 0x100) = 0x18;
|
||||
if (a1 != 0) {
|
||||
func_801876B0(a0);
|
||||
}
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x100) = 0x10;
|
||||
if (a1 != 0) {
|
||||
func_80187664(a0);
|
||||
}
|
||||
if (D_801E4BBC == 0) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0xCC) + 0xFE) += 1;
|
||||
}
|
||||
}
|
||||
|
||||
*(s16 *)(a0 + 0xAE) = -1;
|
||||
func_8012AD44((s32 *)a0, 2);
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012AD44(s32 *a0, s16 a1);
|
||||
|
||||
|
||||
@@ -2,7 +2,121 @@
|
||||
#include "../shared/engine_core.h"
|
||||
#include "ov_SC02_005_shared.h"
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80185E80", func_80185E80);
|
||||
#include "common.h"
|
||||
|
||||
extern u16 D_801E4BBC;
|
||||
extern s32 D_801959E0[];
|
||||
extern s32 D_801E43A0;
|
||||
extern s32 func_801860F4();
|
||||
extern s32 func_8018AD20(s32 a0);
|
||||
extern s32 func_8018AC48(s32 a0);
|
||||
extern s32 func_80186144(void *a0, s32 a1);
|
||||
|
||||
s16 func_80185E80(s32 arg0) {
|
||||
u16 *p;
|
||||
s32 flag;
|
||||
s32 res;
|
||||
s32 flags;
|
||||
u16 val;
|
||||
u16 var;
|
||||
s16 nxt;
|
||||
s16 i;
|
||||
|
||||
p = (u16 *)D_801959E0[D_801E4BBC];
|
||||
if (*(s16 *)(arg0 + 0x100) != 0) {
|
||||
goto ret0;
|
||||
}
|
||||
if (*(s32 *)(arg0 + 0xE8) & 0x200) {
|
||||
goto ret0;
|
||||
}
|
||||
var = p[*(s16 *)(arg0 + 0x102) * 2 + 1];
|
||||
flag = var & 0x100;
|
||||
var = var & 0xFF;
|
||||
switch ((s16)(var - 2)) {
|
||||
case 0:
|
||||
if (func_801860F4(arg0, (s16)var) != 0) {
|
||||
if (D_801E43A0 & 0x2000) {
|
||||
var = 0;
|
||||
}
|
||||
} else {
|
||||
var = 0;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
res = func_8018AD20(arg0);
|
||||
*(s16 *)(arg0 + 0xE0) = res;
|
||||
if ((s16)res < 0) {
|
||||
var = 0;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
res = func_8018AC48(arg0);
|
||||
*(s16 *)(arg0 + 0xE0) = res;
|
||||
if ((s16)res < 0) {
|
||||
var = 1;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
res = func_80186144((void *)arg0, 9);
|
||||
*(s16 *)(arg0 + 0xE0) = res;
|
||||
if ((s16)res < 0) {
|
||||
var = 1;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (*(s32 *)(arg0 + 0xE8) & 0x408) {
|
||||
var = 0;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
if ((*(s32 *)(arg0 + 0xE8) & 0x800) == 0) {
|
||||
if (*(s16 *)(arg0 + 0x76) < 0x81) {
|
||||
var = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
flags = *(s32 *)(arg0 + 0xE8);
|
||||
if (flags & 0x800) {
|
||||
var = 0;
|
||||
break;
|
||||
}
|
||||
if ((flags & 0x400) == 0) {
|
||||
if ((flags & 0xA) != 2) {
|
||||
goto ret0;
|
||||
}
|
||||
*(u16 *)(arg0 + 0xFE) = *(u16 *)(arg0 + 0xFE) + 1;
|
||||
goto ret0;
|
||||
}
|
||||
res = func_80186144((void *)arg0, 8);
|
||||
*(s16 *)(arg0 + 0xE0) = res;
|
||||
if ((s16)res < 0) {
|
||||
var = 6;
|
||||
}
|
||||
break;
|
||||
}
|
||||
i = *(u16 *)(arg0 + 0x102) + 1;
|
||||
*(u16 *)(arg0 + 0x102) = i;
|
||||
nxt = ((s16 *)p)[i * 2];
|
||||
if (nxt == -1) {
|
||||
val = D_801E4BBC;
|
||||
*(s16 *)(arg0 + 0x102) = 0;
|
||||
val = *(u16 *)D_801959E0[val];
|
||||
*(u16 *)(arg0 + 0x100) = val;
|
||||
} else {
|
||||
*(u16 *)(arg0 + 0x100) = nxt;
|
||||
}
|
||||
if (flag != 0) {
|
||||
if ((*(s32 *)(arg0 + 0xE8) & 0xA) == 2) {
|
||||
*(u16 *)(arg0 + 0xFE) = *(u16 *)(arg0 + 0xFE) + 1;
|
||||
}
|
||||
}
|
||||
return var;
|
||||
ret0:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80132E6C(s16 *a0);
|
||||
extern s16 D_80126CB8;
|
||||
|
||||
@@ -65,7 +65,133 @@ extern void func_8018452C();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80183178", func_80183630);
|
||||
#include "common.h"
|
||||
|
||||
extern void func_8012B23C(s32 a0);
|
||||
extern void func_8012B14C(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern void *D_80195144;
|
||||
|
||||
void func_80183630(s32 a0) {
|
||||
extern s32 func_801845F4();
|
||||
extern void func_8018487C(s32 a0);
|
||||
extern s32 func_80183954(s32 a0);
|
||||
extern s32 func_80183B30(s32 a0, s32 a1);
|
||||
extern s32 func_80183994(s32 a0, s32 a1);
|
||||
extern void func_8012B178(s32 a0, s32 a1);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern s32 func_8012CBCC(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8013C9C4(void *a0);
|
||||
extern void func_8012B200(u8 *a0);
|
||||
extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012B260(u8 *a0);
|
||||
extern void func_8018452C();
|
||||
extern s32 D_801955F0;
|
||||
extern u8 D_801F3EFC[];
|
||||
extern u8 D_801F3FA4[];
|
||||
extern u8 D_801F41DC[];
|
||||
extern u8 D_801F3EA4[];
|
||||
extern u8 D_80195120[];
|
||||
extern u8 D_80195184[];
|
||||
|
||||
if (func_801845F4() == 1) {
|
||||
return;
|
||||
}
|
||||
switch (*(u16 *)(a0 + 0x34)) {
|
||||
case 0:
|
||||
func_8018487C(a0);
|
||||
D_801955F0 = func_80183954(a0);
|
||||
if (func_80183B30(a0, D_801955F0) == 1) {
|
||||
*(s16 *)(a0 + 0x34) = 8;
|
||||
return;
|
||||
}
|
||||
if (func_80183994(a0, D_801955F0) != 1) {
|
||||
return;
|
||||
}
|
||||
*(s16 *)(a0 + 0x34) = 3;
|
||||
return;
|
||||
case 1:
|
||||
*(s32 *)(a0 + 0x1C) = 0x1E;
|
||||
*(s16 *)(a0 + 0x34) = 2;
|
||||
case 2:
|
||||
if (func_80183994(a0, D_801955F0) == 1) {
|
||||
*(s16 *)(a0 + 0x34) = 3;
|
||||
return;
|
||||
}
|
||||
if (func_8012BEE8(a0) != 0) {
|
||||
*(s16 *)(a0 + 0x34) = 0;
|
||||
func_8012A828(a0, D_801F3EFC);
|
||||
*(s32 *)(a0 + 0x1C) = 0x2D;
|
||||
}
|
||||
return;
|
||||
case 3:
|
||||
func_8012B23C(a0);
|
||||
func_8012B178(a0, 0xA0000);
|
||||
*(s16 *)(a0 + 0x34) = 4;
|
||||
return;
|
||||
case 4:
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) -= 0x20;
|
||||
if (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) < -0x400) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = -0x400;
|
||||
}
|
||||
if (func_8012CBCC(a0) & 0x2000) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = -0x400;
|
||||
*(s32 *)(a0 + 0x1C) = 0x1E;
|
||||
*(s16 *)(a0 + 0x34) = 5;
|
||||
func_8002D4C8(0xB09, 0);
|
||||
func_8013C9C4(D_80195184);
|
||||
}
|
||||
return;
|
||||
case 5:
|
||||
if (func_8012BEE8(a0) != 0) {
|
||||
*(s16 *)(a0 + 0x34) = 6;
|
||||
}
|
||||
return;
|
||||
case 6:
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) += 0x80;
|
||||
if (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) >= 0) {
|
||||
func_8012B2CC(a0);
|
||||
func_8012B23C(a0);
|
||||
func_8012B178(a0, 0xFFFC8000);
|
||||
func_8012A828(a0, D_801F3FA4);
|
||||
*(s16 *)(a0 + 0x34) = 7;
|
||||
}
|
||||
return;
|
||||
case 7:
|
||||
if (((s32 (*)(s32, s32))func_8012CC1C)(a0, (s32)&D_80195144) & 0x8000) {
|
||||
*(s16 *)(a0 + 0x34) = 0;
|
||||
func_8018452C(a0);
|
||||
*(s32 *)(a0 + 0xDC) &= ~0x10;
|
||||
}
|
||||
return;
|
||||
case 8:
|
||||
func_8012A828(a0, D_801F41DC);
|
||||
*(s32 *)(a0 + 0x1C) = 0x14;
|
||||
*(s16 *)(a0 + 0x34) = 9;
|
||||
return;
|
||||
case 9:
|
||||
if (func_8012BEE8(a0) != 0) {
|
||||
*(s16 *)(a0 + 0x34) = 0xA;
|
||||
*(s16 *)(a0 + 0x98) = 0;
|
||||
}
|
||||
return;
|
||||
case 10:
|
||||
func_8012A828(a0, D_801F3EA4);
|
||||
func_8012B200((u8 *)a0);
|
||||
func_8012B14C(a0, (s32)D_80195120);
|
||||
func_8012AD80(a0);
|
||||
func_8012B23C(a0);
|
||||
func_8012B260((u8 *)a0);
|
||||
*(s16 *)(a0 + 0x34) = 0xB;
|
||||
*(s32 *)(a0 + 0x1C) = 0x10;
|
||||
*(s32 *)(a0 + 0xDC) = (*(s32 *)(a0 + 0xDC) & ~0x20) | 0x48;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012AD80(s32 a0);
|
||||
|
||||
@@ -346,7 +472,128 @@ void func_80184134(s32 param_1) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80183178", func_8018418C);
|
||||
/* Declarations: the five names already at file scope above (func_8012B23C L15,
|
||||
* func_8012B14C L16, func_8012A828 L17, func_8012BEE8 L36, func_80184738 L335)
|
||||
* are NOT redeclared. Every new name is spelled exactly as this TU already
|
||||
* spells it further down (func_8012CBCC L813/L862, func_8013C9C4 L2566,
|
||||
* func_801439C0 L1885, func_80178D18 L2586, func_8001AAD0 L818/L865,
|
||||
* func_80172658 L369/L443, D_80126B58 L371/L1271/L3304) so the duplicate
|
||||
* declarations are identical; the rest follow the fleet canon. The
|
||||
* engine_core.h hits for these symbols are all inside DEFINE_ macros
|
||||
* (block scope), so they cannot conflict at file scope.
|
||||
*
|
||||
* CODEGEN NOTE — the one non-obvious lever (REGALLOC-PERM/$v0>$v1>$v0, 3 ins).
|
||||
* Case 1, case 5 and the case-2 clamp-hit arm all reach the SAME
|
||||
* `(*(u16 *)(s0+0x34))++` tail at 0x80184304. Writing case 2's arm as a
|
||||
* `goto` into that shared tail compiles to the right instruction sequence but
|
||||
* allocates the post-call block's constant/pointer pair as $v1/$v0 instead of
|
||||
* the target's $v0/$v1. Writing the increment out LONGHAND in case 2 instead
|
||||
* matches: gcc-2.7.2 runs the cross-jumping `jump_optimize` pass AFTER
|
||||
* register allocation, so the duplicated tail is allocated in its own block
|
||||
* (giving the target's registers) and only then merged back into the shared
|
||||
* `j 0x80184304`. Both forms emit 162 instructions; only the duplicated form
|
||||
* is byte-identical. (Cookbook §176-B's law — "1-4 off is usually NOT
|
||||
* register allocation" — with a new lever: a shared tail reached by `goto`
|
||||
* vs. duplicated in the source is a REGALLOC dial, not just a jump dial.) */
|
||||
|
||||
extern s32 func_8012CBCC(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012E8C4(u8 *a0);
|
||||
extern void func_8013C9C4(void *a0);
|
||||
extern s32 func_80172658(s32 *a0);
|
||||
extern s32 func_801439C0(s32 a0);
|
||||
extern s32 func_801789AC(s32 a0);
|
||||
extern void func_80178D18(void);
|
||||
extern void func_8001AAD0(s32 a0, s32 a1);
|
||||
extern void func_8001931C(void);
|
||||
|
||||
extern s32 D_80126B58;
|
||||
extern s32 D_80195138;
|
||||
extern u8 D_8019514C[];
|
||||
extern u8 D_80195184[];
|
||||
extern s16 D_801EBA7C;
|
||||
extern u8 D_801F4654[];
|
||||
|
||||
void func_8018418C(s32 a0) {
|
||||
s32 s0 = a0;
|
||||
|
||||
switch (*(u16 *)(s0 + 0x34)) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
func_8012B23C(s0);
|
||||
goto incr;
|
||||
case 2:
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) - 0x20;
|
||||
if (*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) < -0x400) {
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = -0x400;
|
||||
}
|
||||
if (func_8012CBCC(s0) & 0x2000) {
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = -0x400;
|
||||
*(s32 *)(s0 + 0x1C) = 0x3C;
|
||||
func_8013C9C4(D_80195184);
|
||||
/* longhand on purpose — see CODEGEN NOTE; cross-jumped into 0x80184304 */
|
||||
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
func_8012E8C4((u8 *)s0);
|
||||
if (func_8012BEE8(s0) != 0) {
|
||||
D_801EBA7C = 3;
|
||||
*(s16 *)(s0 + 0x34) = 0;
|
||||
func_8001931C();
|
||||
if (*(s32 *)(s0 + 0xD0) != 0) {
|
||||
func_801439C0(*(s32 *)(s0 + 0xD0));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (func_80172658(&D_80126B58) != 0) {
|
||||
D_801EBA7C = 3;
|
||||
*(s16 *)(s0 + 0x34) = 0;
|
||||
func_8001931C();
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if ((*(u16 *)(s0 + 0x5C) & 1) == 0) {
|
||||
break;
|
||||
}
|
||||
*(u16 *)(s0 + 0x5C) = *(u16 *)(s0 + 0x5C) & 0xFFFE;
|
||||
*(s16 *)(s0 + 0x98) = 0;
|
||||
func_8012B23C(s0);
|
||||
func_8012B14C(s0, (s32)&D_80195138);
|
||||
func_8001AAD0(1, 0x4331);
|
||||
incr:
|
||||
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
|
||||
break;
|
||||
case 6:
|
||||
if ((((s32 (*)(s32, s32))func_8012CC1C)(s0, (s32)D_8019514C) & 0x2000) == 0) {
|
||||
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
|
||||
func_8012B23C(s0);
|
||||
func_8012A828(s0, D_801F4654);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) + 0x20;
|
||||
if (*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) > 0x400) {
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0x400;
|
||||
}
|
||||
if (func_8012CBCC(s0) & 0x2000) {
|
||||
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0x400;
|
||||
*(s32 *)(s0 + 0x1C) = 0x3C;
|
||||
*(s16 *)(s0 + 0x34) = 3;
|
||||
func_8013C9C4(D_80195184);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (func_801789AC(s0) == 1) {
|
||||
((void (*)(s32))func_80178D18)(s0);
|
||||
*(s16 *)(s0 + 2) = 0xE;
|
||||
func_80184738(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -9,7 +9,98 @@
|
||||
* config/splat.ov_SC02_011.yaml and cookbook §426/§431. Declarations shared with the sibling
|
||||
* TUs live in src/ov_SC02_011/ov_SC02_011_shared.h. */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_80188E3C", func_80188E3C);
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_8012B8E4(s32 a0, s32 a1);
|
||||
extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_801890C8(s32 a0);
|
||||
|
||||
extern u8 D_801960A0[];
|
||||
extern u8 D_801D3ACC[];
|
||||
extern s16 D_801D3B74;
|
||||
extern s16 D_801D3F84;
|
||||
extern s16 D_801D458C;
|
||||
|
||||
void func_80188E3C(s32 a0) {
|
||||
s32 v0;
|
||||
s32 v1;
|
||||
|
||||
switch (*(u16 *)(a0 + 0x34)) {
|
||||
case 0:
|
||||
v1 = *(s32 *)(a0 + 0x1C);
|
||||
v0 = 7;
|
||||
goto cmpA;
|
||||
case 1:
|
||||
v0 = func_8012B8E4(a0, 6);
|
||||
v1 = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + v0;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = v1;
|
||||
break;
|
||||
case 2:
|
||||
v1 = *(s32 *)(a0 + 0x1C);
|
||||
v0 = 0xA;
|
||||
cmpA:
|
||||
if (v1 == v0) {
|
||||
func_8012D5E4(a0, (s32)D_801960A0, (s32)(D_801960A0 + 8), 0xB);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (*(s32 *)(a0 + 0x1C) == 0xB) {
|
||||
func_8012D5E4(a0, (s32)D_801960A0, (s32)(D_801960A0 + 8), 0x11);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
v0 = func_8012B8E4(a0, 6);
|
||||
v1 = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + v0;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = v1;
|
||||
if (*(s32 *)(a0 + 0x1C) == 0xC) {
|
||||
func_801890C8(a0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (func_8012BEE8(a0) != 0) {
|
||||
switch (*(u16 *)(a0 + 0x34)) {
|
||||
case 0:
|
||||
if (func_8012BD3C(a0, 0x400, 0x4000) != 0) {
|
||||
*(u16 *)(a0 + 0x34) = 1;
|
||||
func_8012A828(a0, D_801D3ACC);
|
||||
*(s32 *)(a0 + 0x1C) = 0xA;
|
||||
} else {
|
||||
*(u16 *)(a0 + 0x2) = 2;
|
||||
*(u16 *)(a0 + 0x34) = 0;
|
||||
func_8012A828(a0, &D_801D3B74);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
*(u16 *)(a0 + 0x34) = 2;
|
||||
*(s32 *)(a0 + 0x1C) = 0x18;
|
||||
func_8012A828(a0, &D_801D3F84);
|
||||
break;
|
||||
case 2:
|
||||
*(u16 *)(a0 + 0x2) = 2;
|
||||
*(u16 *)(a0 + 0x34) = 0;
|
||||
func_8012A828(a0, &D_801D3B74);
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
v0 = *(u16 *)(a0 + 0x100);
|
||||
v0 -= 1;
|
||||
*(u16 *)(a0 + 0x100) = v0;
|
||||
if ((v0 << 16) == 0) {
|
||||
*(u16 *)(a0 + 0x2) = 8;
|
||||
func_8012A828(a0, &D_801D458C);
|
||||
} else {
|
||||
*(s32 *)(a0 + 0x1C) = 0x1E;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_8012B200(u8 *a0);
|
||||
|
||||
@@ -67,7 +67,119 @@ void func_8018676C(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8018624C", func_801867D0);
|
||||
#include "common.h"
|
||||
|
||||
/* §379/§30 — the `+= 1` on 0x34 must be a COMPONENT_REF (MEM_IN_STRUCT_P `/s`) so
|
||||
* sched1 may hoist the fixed-address D_801BCBBC load above the varying-address
|
||||
* `sh 0x34($s0)` store. A plain `*(u16 *)(s0 + 0x34)` cast denies `/s`, the
|
||||
* true_dependence drop clause never fires, and the block costs two load-delay
|
||||
* nops (the whole function's LENGTH-DRIFT/2). */
|
||||
struct Ctr34 {
|
||||
u16 h;
|
||||
};
|
||||
|
||||
extern void func_8013C9C4(void *a0);
|
||||
extern void func_801871C0(void *a0, s32 a1, s32 a2);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern s32 func_8012E544(s32 a0);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern void func_80187434(void *a0);
|
||||
extern void func_801870B4(void);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern s32 D_801BCBBC;
|
||||
extern u8 D_8018EDF4[];
|
||||
extern u8 D_8018AAA4[];
|
||||
extern u8 D_801B2E28[];
|
||||
extern u8 D_801B2FC0[];
|
||||
extern u8 D_8018EACC[];
|
||||
extern u8 D_8018EC24[];
|
||||
extern u8 D_8018E9BC[];
|
||||
extern u8 D_8018EAA4[];
|
||||
|
||||
void func_801867D0(s32 a0)
|
||||
{
|
||||
s32 s0 = a0;
|
||||
s32 v0;
|
||||
|
||||
switch (*(u16 *)(s0 + 0x34)) {
|
||||
case 0:
|
||||
if (*(u32 *)(s0 + 0x94) < 0x1F && (*(s32 *)(s0 + 0x1C) & 3) == 0) {
|
||||
func_8013C9C4(D_8018EDF4);
|
||||
func_801871C0((void *)s0, 2, 2);
|
||||
}
|
||||
if (*(s32 *)(s0 + 0x94) == 0x13) {
|
||||
func_8002D4C8(0xBC2, 0);
|
||||
}
|
||||
if (*(s32 *)(s0 + 0x94) == 0x24) {
|
||||
func_8002D4C8(0xBC3, 0);
|
||||
}
|
||||
if (*(s32 *)(s0 + 0x94) == 0x32) {
|
||||
func_8013C9C4(D_8018AAA4);
|
||||
func_801871C0((void *)s0, 10, 5);
|
||||
}
|
||||
if (func_8012E544(0x222) == 0) {
|
||||
func_8012A828(s0, D_801B2E28);
|
||||
func_8012A828(*(s32 *)(s0 + 0x6C), D_801B2FC0);
|
||||
((struct Ctr34 *)(s0 + 0x34))->h = ((struct Ctr34 *)(s0 + 0x34))->h + 1;
|
||||
D_801BCBBC = D_801BCBBC + 1;
|
||||
return;
|
||||
}
|
||||
*(s32 *)(s0 + 0x1C) = *(s32 *)(s0 + 0x1C) + 1;
|
||||
if (*(s32 *)(s0 + 0x1C) >= 0x12C) {
|
||||
v0 = func_8012E544(0x222);
|
||||
if (v0 != 0) {
|
||||
*(s16 *)(v0 + 0x100) = 1;
|
||||
}
|
||||
func_8012A828(s0, D_8018EACC);
|
||||
func_8012A828(*(s32 *)(s0 + 0x6C), D_8018EC24);
|
||||
*(u16 *)(s0 + 0x34) = 2;
|
||||
}
|
||||
return;
|
||||
case 1:
|
||||
if (*(s32 *)(s0 + 0x94) == 0x14) {
|
||||
func_8013C9C4(D_8018AAA4);
|
||||
func_801871C0((void *)s0, 10, 5);
|
||||
func_80187434((void *)s0);
|
||||
func_8002D4C8(0xC8F, 0);
|
||||
}
|
||||
if (*(s16 *)(s0 + 0x98) != 0) {
|
||||
return;
|
||||
}
|
||||
if (D_801BCBBC < 3) {
|
||||
*(s16 *)(s0 + 2) = 6;
|
||||
} else {
|
||||
*(s16 *)(s0 + 2) = 8;
|
||||
}
|
||||
return;
|
||||
case 2:
|
||||
if (*(s16 *)(s0 + 0x98) != 0) {
|
||||
return;
|
||||
}
|
||||
func_8012A828(s0, D_8018E9BC);
|
||||
func_8012A828(*(s32 *)(s0 + 0x6C), D_8018EAA4);
|
||||
*(s16 *)(*(s32 *)(s0 + 0xCC) + 2) = 1;
|
||||
func_8002D4C8(0x72F, 0);
|
||||
*(s32 *)(s0 + 0x1C) = 0xA0;
|
||||
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
|
||||
return;
|
||||
case 3:
|
||||
if (*(s32 *)(s0 + 0x1C) == 0x64) {
|
||||
*(s32 *)(*(s32 *)(*(s32 *)(s0 + 0xCC) + 0x20) + 4) &= 0x7FFFFFFF;
|
||||
func_801870B4();
|
||||
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
|
||||
}
|
||||
/* fall through */
|
||||
case 4:
|
||||
if (func_8012BEE8(s0) != 0) {
|
||||
*(s16 *)(s0 + 2) = 3;
|
||||
*(s16 *)(*(s32 *)(s0 + 0xCC) + 2) = 2;
|
||||
*(s32 *)(s0 + 0x1C) = 0x5A;
|
||||
func_8002D4C8(4, 0x72F);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s32 func_80178B18(s32, s32);
|
||||
|
||||
@@ -5085,289 +5085,3 @@ void func_80180E28(s32 param_1)
|
||||
}
|
||||
func_8012B370(param_1);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_80180F84);
|
||||
|
||||
extern void (*D_80192854[])(void);
|
||||
|
||||
void func_801813F4(s32 arg0) {
|
||||
D_80192854[*(u16 *)(arg0 + 2)]();
|
||||
if (*(u16 *)arg0 != 0) {
|
||||
*(u16 *)(arg0 + 0xFC) &= 0xFFF;
|
||||
*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) = 0x1000 - (func_80047948(*(s16 *)(arg0 + 0xFC)) >> 3);
|
||||
*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) = (func_80047948(*(s16 *)(arg0 + 0xFC)) >> 3) + 0x1000;
|
||||
*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1C) = (func_80047948(*(s16 *)(arg0 + 0xFC)) >> 3) + 0x1000;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_800599B8(void *a0, void *a1);
|
||||
extern void func_8012C218(void *a0);
|
||||
extern void func_8002A520(void *a0);
|
||||
extern void func_8002A790(void *a0);
|
||||
extern u8 D_80192480[];
|
||||
extern u8 D_80192488[];
|
||||
extern u8 D_80192860[];
|
||||
extern void *D_801C39FC[];
|
||||
extern void *D_801C3A00[];
|
||||
extern volatile s32 D_801C7E30;
|
||||
extern s32 D_801C7E64;
|
||||
|
||||
void func_801814AC(s32 param_1) {
|
||||
volatile s32 pad1;
|
||||
volatile s32 pad2;
|
||||
s32 var;
|
||||
u8 t;
|
||||
|
||||
func_8016AA50(param_1, *(s16 *)(param_1 + 0x60));
|
||||
if (*(u16 *)(param_1 + 0x82) & 1) {
|
||||
func_8016B428(param_1);
|
||||
func_80019064(D_80192860);
|
||||
}
|
||||
*(s32 *)(param_1 + 0x1C) = 10;
|
||||
*(u16 *)(param_1 + 0x5C) = 0;
|
||||
*(u16 *)(param_1 + 0x76) = *(u16 *)(param_1 + 0x76) - *(u16 *)(param_1 + 0x60);
|
||||
*(u16 *)(D_801C7E30 + 0x34) = 0;
|
||||
*(u16 *)(D_801C7E30 + 2) = 9;
|
||||
*(u8 *)(D_801C7E30 + 0xC2) = 0xE;
|
||||
var = D_801C7E30;
|
||||
t = (*(u8 *)(var + 0xC2) + 2) & 0xF;
|
||||
*(u8 *)(var + 0xC2) = t;
|
||||
func_800599B8(D_80192480, D_801C39FC[t]);
|
||||
func_800599B8(D_80192488, D_801C3A00[*(u8 *)(var + 0xC2)]);
|
||||
if (D_801C7E64 != 0) {
|
||||
func_8012C218(D_801C7E64);
|
||||
}
|
||||
if (*(u16 *)(D_801C7E30 + 0x70) & 1) {
|
||||
func_8002D4C8(4, 0x89F);
|
||||
*(u16 *)(D_801C7E30 + 0x70) &= 0xFFFE;
|
||||
}
|
||||
func_8002D4C8(0x8A0, 0);
|
||||
if (*(u8 *)(param_1 + 0x5E) != 0x1D) {
|
||||
if (*(u8 *)(param_1 + 0xC8) != 0) {
|
||||
func_8002A520(param_1);
|
||||
}
|
||||
if (*(u8 *)(param_1 + 0xC9) != 0) {
|
||||
func_8002A790(param_1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#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" )
|
||||
|
||||
extern void RotTransSV(void *a0, void *a1, void *a2);
|
||||
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
|
||||
extern void func_8004914C(void *a0);
|
||||
extern void func_800491AC(void *a0);
|
||||
extern s32 func_8004787C(s32 a0);
|
||||
extern void *func_80010A08(s32 a0);
|
||||
extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_8005A600(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
|
||||
extern s32 AddPrim(s32 a0, void *a1);
|
||||
extern u8 D_801928B0[];
|
||||
extern u8 D_800AF648;
|
||||
extern s16 D_80192870;
|
||||
extern s16 D_800B9A02;
|
||||
extern s32 D_800A651C;
|
||||
extern s32 D_80126950;
|
||||
extern u32 D_80192874[];
|
||||
extern u8 D_801928A0[];
|
||||
extern u8 D_801928A1[];
|
||||
extern u8 D_801928A2[];
|
||||
extern u8 D_801928A3[];
|
||||
extern u8 D_80192880[];
|
||||
extern u8 D_80192881[];
|
||||
extern u8 D_80192882[];
|
||||
extern u8 D_80192883[];
|
||||
extern u8 D_80192890[];
|
||||
extern u8 D_80192891[];
|
||||
extern u8 D_80192892[];
|
||||
extern u8 D_80192893[];
|
||||
|
||||
void func_80181670(void *a0)
|
||||
{
|
||||
s32 tags[4]; /* sp+0x18 */
|
||||
s16 sv[4]; /* sp+0x28 */
|
||||
s16 xs[8]; /* sp+0x30 */
|
||||
s16 ys[8]; /* sp+0x40 */
|
||||
struct {
|
||||
s32 flag; /* sp+0x50 */
|
||||
u16 sxy[2]; /* sp+0x54 */
|
||||
s32 pz; /* sp+0x58 */
|
||||
} o;
|
||||
|
||||
s32 m;
|
||||
s32 ret;
|
||||
s32 d;
|
||||
s32 e;
|
||||
register s32 p __asm__("$8");
|
||||
register s32 q __asm__("$2");
|
||||
register s32 n __asm__("$6");
|
||||
s32 sc;
|
||||
s32 x;
|
||||
s32 y;
|
||||
s32 ot;
|
||||
u8 *prim;
|
||||
u8 *pp;
|
||||
u8 *base;
|
||||
u32 *pal;
|
||||
s32 i;
|
||||
s32 k;
|
||||
|
||||
m = *(s32 *)((s32)a0 + 0x20) + 0x34;
|
||||
gte_SetRotMatrix(m);
|
||||
gte_SetTransMatrix(m);
|
||||
|
||||
RotTransSV(D_801928B0, sv, &o.flag);
|
||||
func_8004914C(&D_800AF648);
|
||||
func_800491AC(&D_800AF648);
|
||||
ret = RotTransPers((s32)sv, (s32)o.sxy, &o.pz, &o.flag);
|
||||
if ((ret > 0) && (o.flag >= 0)) {
|
||||
sc = D_80192870;
|
||||
ot = *(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + ret * 4;
|
||||
*(u16 *)((s32)a0 + 0xDE) += 0x100;
|
||||
e = (func_8004787C(*(s16 *)((s32)a0 + 0xDE)) * 3 / 8) - 0x800;
|
||||
if (e < 0) {
|
||||
e = 0x800 - (func_8004787C(*(s16 *)((s32)a0 + 0xDE)) * 3 / 8);
|
||||
} else {
|
||||
e = (func_8004787C(*(s16 *)((s32)a0 + 0xDE)) * 3 / 8) - 0x800;
|
||||
}
|
||||
p = e * sc;
|
||||
q = p >> 12;
|
||||
n = q + 8;
|
||||
__asm__ __volatile__("" : "=r"(n) : "0"(n));
|
||||
d = n * (D_80126950 + 0x1F4) / (ret * 4);
|
||||
|
||||
x = o.sxy[0];
|
||||
y = o.sxy[1];
|
||||
|
||||
xs[2] = x;
|
||||
ys[2] = y;
|
||||
xs[0] = x - d;
|
||||
xs[1] = x - ((d * 179) >> 8);
|
||||
xs[3] = x + ((d * 179) >> 8);
|
||||
xs[4] = x + d;
|
||||
ys[0] = y - d;
|
||||
ys[1] = y - ((d * 179) >> 8);
|
||||
ys[3] = y + ((d * 179) >> 8);
|
||||
ys[4] = y + d;
|
||||
|
||||
prim = (u8 *)func_80010A08(0x9C);
|
||||
if (prim != 0) {
|
||||
s32 tp;
|
||||
tp = GetTPage(0, 1, 0, 0);
|
||||
func_8005A600((s32)prim, 0, 1, (u16)tp, 0);
|
||||
|
||||
tags[0] = (s32)(prim + 0xC);
|
||||
pp = prim + 0xC;
|
||||
pal = D_80192874;
|
||||
base = (u8 *)tags;
|
||||
k = 0;
|
||||
tags[1] = (s32)(prim + 0x30);
|
||||
tags[2] = (s32)(prim + 0x54);
|
||||
tags[3] = (s32)(prim + 0x78);
|
||||
do {
|
||||
i = k * 4;
|
||||
*(u32 *)(pp + 0x04) = pal[D_801928A0[i]];
|
||||
*(u32 *)(pp + 0x0C) = pal[D_801928A1[i]];
|
||||
*(u32 *)(pp + 0x14) = pal[D_801928A2[i]];
|
||||
*(u32 *)(pp + 0x1C) = pal[D_801928A3[i]];
|
||||
*(u8 *)(pp + 0x03) = 8;
|
||||
*(u8 *)(pp + 0x07) = 0x3A;
|
||||
*(u16 *)(pp + 0x08) = *(u16 *)(base + 0x18 + D_80192880[i] * 2);
|
||||
*(u16 *)(pp + 0x10) = *(u16 *)(base + 0x18 + D_80192881[i] * 2);
|
||||
*(u16 *)(pp + 0x18) = *(u16 *)(base + 0x18 + D_80192882[i] * 2);
|
||||
*(u16 *)(pp + 0x20) = *(u16 *)(base + 0x18 + D_80192883[i] * 2);
|
||||
*(u16 *)(pp + 0x0A) = *(u16 *)(base + 0x28 + D_80192890[i] * 2);
|
||||
*(u16 *)(pp + 0x12) = *(u16 *)(base + 0x28 + D_80192891[i] * 2);
|
||||
*(u16 *)(pp + 0x1A) = *(u16 *)(base + 0x28 + D_80192892[i] * 2);
|
||||
*(u16 *)(pp + 0x22) = *(u16 *)(base + 0x28 + D_80192893[i] * 2);
|
||||
AddPrim(ot, pp);
|
||||
k += 1;
|
||||
pp += 0x24;
|
||||
} while (k < 4);
|
||||
AddPrim(ot, prim);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C2C4(s32 a0);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern void func_80181670(void *a0);
|
||||
extern u8 D_801928B8[];
|
||||
extern u8 D_801928C8[];
|
||||
extern u8 D_801A3E2C[];
|
||||
|
||||
void func_80181B4C(void *a0)
|
||||
{
|
||||
s32 v0;
|
||||
s32 ptr64;
|
||||
s32 rec;
|
||||
|
||||
if (*(u16 *)((s32)a0 + 0x2) == 0) {
|
||||
v0 = func_8012C1B8();
|
||||
*(s32 *)((s32)a0 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4(a0);
|
||||
return;
|
||||
}
|
||||
func_8001C2C4(v0);
|
||||
*(u16 *)((s32)a0 + 0x5C) = 0x8000;
|
||||
*(s32 *)((s32)a0 + 0x58) = (s32)D_801928B8 | 0x40000000 | 0x20000000;
|
||||
*(u16 *)((s32)a0 + 0x76) = 10000;
|
||||
*(u8 *)((s32)a0 + 0xC0) = 1;
|
||||
*(s16 *)((s32)a0 + 0xAE) = -1;
|
||||
*(s32 *)((s32)a0 + 0xBC) = (s32)D_801928C8;
|
||||
*(s32 *)((s32)a0 + 0x4) = 0x25B0000;
|
||||
*(s32 *)((s32)a0 + 0x8) = 0xFF900000;
|
||||
*(s32 *)((s32)a0 + 0xB4) = 0;
|
||||
*(u16 *)((s32)a0 + 0x2) += 1;
|
||||
*(s32 *)((s32)a0 + 0xC4) |= 3;
|
||||
} else {
|
||||
ptr64 = *(s32 *)((s32)a0 + 0x64);
|
||||
if (*(u16 *)ptr64 != 0) {
|
||||
rec = *(s32 *)(*(s32 *)(ptr64 + 0x20) + 0x20);
|
||||
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = *(u16 *)(rec + 0x6);
|
||||
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = *(u16 *)(rec + 0x8);
|
||||
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = *(u16 *)(rec + 0xA) - 0x100;
|
||||
*(s16 *)((s32)a0 + 0x6) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x6) + *(u16 *)(rec + 0x0);
|
||||
*(s16 *)((s32)a0 + 0xA) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0xA) + *(u16 *)(rec + 0x2);
|
||||
*(s16 *)((s32)a0 + 0xE) = *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0xE) + *(u16 *)(rec + 0x4);
|
||||
func_8012B2CC((s32)a0);
|
||||
if (*(s32 *)(*(s32 *)((s32)a0 + 0x64) + 0x90) == (s32)D_801A3E2C) {
|
||||
func_80181670(a0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4410,7 +4410,370 @@ void func_8017EADC(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017EC4C);
|
||||
/* func_8017EC4C (ov_SC06_024, TU ov_SC06_024_jr_8017BEBC.c) — S68 fable escalation, MATCH 556/556.
|
||||
*
|
||||
* Warm-started from the opus draft (closeness 16); every opus lever preserved:
|
||||
* func_8012EC04(param_1,..), D_80193440[1]/[2] spelling, dbase in $fp with the
|
||||
* raw *(u16*)(dbase+0xA3AA) parity read, 16-byte stride on D_80193550/54/58/5C,
|
||||
* the g{} frame sizing, the in-place abs #1 + zero-byte asm on n (verified
|
||||
* load-bearing: removing it costs -2 length; its addu $a0,$s1,$zero copy is IN
|
||||
* the target), the blez guard shape, the two-armed 0x102 write, i reuse, otp/otq.
|
||||
*
|
||||
* What closed the final 16 (the two addPrim merge clusters):
|
||||
* the wrong-register rows were LOCAL-ALLOC QTY DENSITY ORDER, not a scheduling
|
||||
* tie. gcc-2.7.2 local-alloc allocates qtys by qty_compare density
|
||||
* (floor_log2(refs)*refs*size/life) and the FIRST qty through the scan grabs the
|
||||
* scan-order register the next one wanted. Each addPrim RMW merge is spelled:
|
||||
*
|
||||
* w = *(u32 *)prim; // raw tag word named EARLY (its own stmt)
|
||||
* ...interleaving stmts... // nextpri update / otq addr / E1 store
|
||||
* w &= 0xFF000000; // in-place mask, SPLIT from the ior
|
||||
* *(u32 *)prim = w | (*otp & 0xFFFFFF); // ior op1 = prim side
|
||||
*
|
||||
* The early def + split &= lengthens w's qty life, DROPPING its density below
|
||||
* the competing address-chain qty, so the chain allocates first (taking $v1)
|
||||
* and w's tied {lw,and,ior,sw} chain lands on the target's register; the ior
|
||||
* operand order (op1 = prim word) then emits or $rP,$rP,$rV with dest tied to
|
||||
* op1. Statement order around pk2[3]=1 is FORCED by a real dependence: the sb
|
||||
* writes byte 3 of the same word the lw reads, so their source order IS their
|
||||
* final order — the target's source read *pk2 AFTER pk2[3]=1 (merge-3) and
|
||||
* *otp BEFORE D_800A5E60=pk2+8 (merge-2). Mask-hoist order (t2 before t3) pins
|
||||
* the *value*-side and to first LUID use, which is why merge-1 splits BOTH
|
||||
* sides (wv first, then w1 &= mask).
|
||||
*
|
||||
* Verified against tools/reference/gcc-2.7.2 sched.c (no birthing boost for
|
||||
* block-dying pseudos, so sched1 load order is priority-fixed; final order is
|
||||
* sched2 under the colors) and local-alloc.c qty_compare. Reloc audit: 1:1 with
|
||||
* the target .s; D_80193440+2/+4 addends == D_80193442/D_80193444 (contiguous).
|
||||
*/
|
||||
#include "common.h"
|
||||
|
||||
typedef struct { s16 vx, vy, vz, pad; } SV_8017EC4C;
|
||||
typedef struct { s16 m[3][3]; s32 t[3]; } MT_8017EC4C;
|
||||
|
||||
extern void func_8012EC04(s32, s32, s32 *);
|
||||
extern void func_8012F14C(s32, s32, s32);
|
||||
extern s32 func_80135888(s32, s32, s32, s32);
|
||||
extern void func_8012F568(s32, s32, s32, s32, s32, s32);
|
||||
extern s32 func_80133784(s32, void *, s32);
|
||||
extern void func_8012F038(int, short *, short *);
|
||||
extern void func_800D20C0(void *, void *, s32);
|
||||
extern void func_80017E68(void *, void *);
|
||||
extern void ApplyMatrixSV(void *, void *, void *);
|
||||
extern void func_800D23D0(void *);
|
||||
extern void RotMatrixYXZ(void *, void *);
|
||||
extern void ApplyTransposeMatrixLV(void *, void *, void *);
|
||||
extern s32 ratan2(s32, s32);
|
||||
|
||||
extern s16 D_800B9A02;
|
||||
extern u16 D_800B99DA;
|
||||
extern u8 D_800A6610[];
|
||||
extern u8 D_800AF630[];
|
||||
extern u8 *D_800A5E60;
|
||||
extern s32 D_801E1158;
|
||||
extern s32 *D_80126B78;
|
||||
extern s32 *D_80126B90;
|
||||
extern u8 D_801152A8[];
|
||||
extern s32 D_801269A4;
|
||||
extern s32 D_801269A8;
|
||||
extern s32 D_801269AC;
|
||||
extern u16 D_80193440[];
|
||||
|
||||
|
||||
extern u8 D_801934B0[];
|
||||
extern s32 D_801934F0[];
|
||||
extern u16 D_80193538[];
|
||||
extern s32 D_80193550[];
|
||||
extern s32 D_80193554[];
|
||||
extern s32 D_80193558[];
|
||||
extern s32 D_8019355C[];
|
||||
|
||||
#define ec4c_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 ec4c_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" )
|
||||
|
||||
#define ec4c_rotcol(r0) __asm__ __volatile__ ( \
|
||||
"lhu $12, 0( %0 );" \
|
||||
"lhu $13, 6( %0 );" \
|
||||
"lhu $14, 12( %0 );" \
|
||||
"mtc2 $12, $9;" \
|
||||
"mtc2 $13, $10;" \
|
||||
"mtc2 $14, $11;" \
|
||||
"nop;" \
|
||||
"nop;" \
|
||||
"mvmva 1, 0, 3, 3, 0;" \
|
||||
"mfc2 $12, $9;" \
|
||||
"mfc2 $13, $10;" \
|
||||
"mfc2 $14, $11;" \
|
||||
"sh $12, 0( %0 );" \
|
||||
"sh $13, 6( %0 );" \
|
||||
"sh $14, 12( %0 )" \
|
||||
: : "r"( r0 ) : "$12", "$13", "$14", "memory" )
|
||||
|
||||
#define ec4c_rottrans(r0) __asm__ __volatile__ ( \
|
||||
"lhu $13, 4( %0 );" \
|
||||
"lhu $12, 0( %0 );" \
|
||||
"sll $13, $13, 16;" \
|
||||
"or $12, $12, $13;" \
|
||||
"mtc2 $12, $0;" \
|
||||
"lwc2 $1, 8( %0 );" \
|
||||
"nop;" \
|
||||
"nop;" \
|
||||
"mvmva 1, 0, 0, 0, 0;" \
|
||||
"swc2 $25, 0( %0 );" \
|
||||
"swc2 $26, 4( %0 );" \
|
||||
"swc2 $27, 8( %0 )" \
|
||||
: : "r"( r0 ) : "$12", "$13", "memory" )
|
||||
|
||||
#define ec4c_ldv3(r0, r1, r2) __asm__ __volatile__ ( \
|
||||
"lwc2 $0, 0( %0 );" \
|
||||
"lwc2 $1, 4( %0 );" \
|
||||
"lwc2 $2, 0( %1 );" \
|
||||
"lwc2 $3, 4( %1 );" \
|
||||
"lwc2 $4, 0( %2 );" \
|
||||
"lwc2 $5, 4( %2 )" \
|
||||
: : "r"( r0 ), "r"( r1 ), "r"( r2 ) )
|
||||
|
||||
#define ec4c_ldv0(r0) __asm__ __volatile__ ( \
|
||||
"lwc2 $0, 0( %0 );" \
|
||||
"lwc2 $1, 4( %0 )" \
|
||||
: : "r"( r0 ) )
|
||||
|
||||
#define ec4c_rtpt() __asm__ __volatile__ ("nop;nop;rtpt")
|
||||
#define ec4c_rtps() __asm__ __volatile__ ("nop;nop;rtps")
|
||||
#define ec4c_avsz4() __asm__ __volatile__ ("nop;nop;avsz4")
|
||||
|
||||
#define ec4c_stflg(r0) __asm__ __volatile__ ( \
|
||||
"cfc2 $12, $31;" \
|
||||
"nop;" \
|
||||
"sw $12, 0( %0 )" \
|
||||
: : "r"( r0 ) : "$12", "memory" )
|
||||
|
||||
#define ec4c_stsxy3(r0, r1, r2) __asm__ __volatile__ (\
|
||||
"swc2 $12, 0( %0 );" \
|
||||
"swc2 $13, 0( %1 );" \
|
||||
"swc2 $14, 0( %2 )" \
|
||||
: : "r"( r0 ), "r"( r1 ), "r"( r2 ) : "memory" )
|
||||
|
||||
#define ec4c_stsxy(r0) __asm__ __volatile__ ( \
|
||||
"swc2 $14, 0( %0 )" \
|
||||
: : "r"( r0 ) : "memory" )
|
||||
|
||||
#define ec4c_stotz(r0) __asm__ __volatile__ ( \
|
||||
"swc2 $7, 0( %0 )" \
|
||||
: : "r"( r0 ) : "memory" )
|
||||
|
||||
void func_8017EC4C(s32 param_1)
|
||||
{
|
||||
SV_8017EC4C v[4];
|
||||
SV_8017EC4C tmp;
|
||||
struct { s32 vx, vy, vz, pad; } vec;
|
||||
MT_8017EC4C cmat;
|
||||
MT_8017EC4C M;
|
||||
struct { s32 flag, flag2, otz, x0, x1, x2, x3, x4; } g;
|
||||
|
||||
u8 *dbase;
|
||||
u8 *pkt;
|
||||
u8 *pk2;
|
||||
u16 *tp;
|
||||
u32 *otp;
|
||||
u32 *otq;
|
||||
u32 ot;
|
||||
s32 hit;
|
||||
s32 d, n, t, rem, i, j, k;
|
||||
s32 aa, bb, cc, rr;
|
||||
u32 w2;
|
||||
u32 w1, wv;
|
||||
u32 w3;
|
||||
|
||||
hit = 0;
|
||||
ot = (u32)&D_800A6610[(*(u16 *)&D_800B9A02) << 14];
|
||||
dbase = D_800AF630;
|
||||
func_8012EC04(param_1, D_801E1158, (s32 *)&cmat);
|
||||
func_8012F14C((s32)&cmat, (s32)&D_80193440[0], *(s32 *)(param_1 + 0xD4) + 8);
|
||||
|
||||
v[0].vx = D_80193440[0];
|
||||
v[0].vy = D_80193440[1];
|
||||
v[0].vz = D_80193440[2] - *(u16 *)(param_1 + 0x100);
|
||||
v[1].vx = D_80193440[0];
|
||||
v[1].vy = D_80193440[1];
|
||||
v[1].vz = D_80193440[2] - *(u16 *)(param_1 + 0x102);
|
||||
func_8012F14C((s32)&cmat, (s32)&v[0], (s32)&v[0]);
|
||||
func_8012F14C((s32)&cmat, (s32)&v[1], (s32)&v[1]);
|
||||
tmp = v[1];
|
||||
if (func_80135888((s32)D_80126B78, (s32)D_80126B90, (s32)&v[0], (s32)&v[1]) != 0) {
|
||||
func_8012F568(1, 0x4018, *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12), 0x96,
|
||||
(s32)&v[1], (s32)D_801152A8);
|
||||
}
|
||||
|
||||
d = *(s16 *)(param_1 + 0x102) - *(s16 *)(param_1 + 0x100);
|
||||
t = d / 128;
|
||||
n = t;
|
||||
if (t < 0) {
|
||||
t = -t;
|
||||
}
|
||||
rem = d - n * 128;
|
||||
__asm__ ("" : "=r" (n) : "0" (n));
|
||||
if ((d - n * 128) < 0) {
|
||||
rem = -rem;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
if (t > 0) {
|
||||
do {
|
||||
v[1].vx = D_80193440[0];
|
||||
v[1].vy = D_80193440[1];
|
||||
v[1].vz = D_80193440[2] - *(u16 *)(param_1 + 0x100) - ((i + 1) << 7);
|
||||
func_8012F14C((s32)&cmat, (s32)&v[1], (s32)&v[1]);
|
||||
hit = func_80133784(1, (void *)&v[0], (s32)&v[1]);
|
||||
if (hit != 0) {
|
||||
break;
|
||||
}
|
||||
v[0].vx = v[1].vx;
|
||||
v[0].vy = v[1].vy;
|
||||
v[0].vz = v[1].vz;
|
||||
i = i + 1;
|
||||
} while (i < t);
|
||||
}
|
||||
|
||||
if (hit == 0) {
|
||||
v[1].vx = D_80193440[0];
|
||||
v[1].vy = D_80193440[1];
|
||||
v[1].vz = D_80193440[2] - *(u16 *)(param_1 + 0x100) - (t << 7) - rem;
|
||||
func_8012F14C((s32)&cmat, (s32)&v[1], (s32)&v[1]);
|
||||
hit = func_80133784(1, (void *)&v[0], (s32)&v[1]);
|
||||
}
|
||||
|
||||
if (hit != 0) {
|
||||
*(SV_8017EC4C *)(*(s32 *)(param_1 + 0xD8) + 8) = v[1];
|
||||
*(s32 *)(*(s32 *)(param_1 + 0xD8) + 4) &= 0x7FFFFFFF;
|
||||
*(s32 *)D_801934B0 = D_801934F0[D_800B99DA & 1];
|
||||
func_8012F038((s32)&cmat, (short *)&v[1], (short *)&v[1]);
|
||||
cc = *(s16 *)(param_1 + 0x100);
|
||||
aa = (s32)*(s16 *)&D_80193440[2] - cc;
|
||||
bb = aa - v[1].vz;
|
||||
if (bb < 0) {
|
||||
rr = cc + (v[1].vz - aa);
|
||||
} else {
|
||||
rr = cc + bb;
|
||||
}
|
||||
*(s16 *)(param_1 + 0x102) = rr;
|
||||
*(s32 *)(param_1 + 0xE4) |= 4;
|
||||
} else {
|
||||
*(s32 *)(*(s32 *)(param_1 + 0xD8) + 4) |= 0x80000000;
|
||||
*(s32 *)(param_1 + 0xE4) &= ~4;
|
||||
}
|
||||
|
||||
v[0].vx = 0;
|
||||
v[0].vy = D_80193440[1];
|
||||
v[0].vz = D_80193440[2];
|
||||
func_8012F14C((s32)&cmat, (s32)&v[0], (s32)&v[0]);
|
||||
func_800D20C0((void *)&v[0], (void *)&v[1], 8);
|
||||
func_80017E68((void *)&v[0], (void *)&M);
|
||||
v[1].vx = 0;
|
||||
v[1].vy = 0;
|
||||
k = *(u16 *)(param_1 + 0x100);
|
||||
v[1].vz = *(u16 *)(param_1 + 0x102) - k;
|
||||
ApplyMatrixSV((void *)&cmat, (void *)&v[1], (void *)&v[1]);
|
||||
func_800D23D0((void *)&v[1]);
|
||||
RotMatrixYXZ((void *)&v[1], (void *)&M);
|
||||
vec.vx = D_801269A4 - v[0].vx;
|
||||
vec.vy = D_801269A8 - v[0].vy;
|
||||
vec.vz = D_801269AC - v[0].vz;
|
||||
ApplyTransposeMatrixLV((void *)&M, (void *)&vec, (void *)&vec);
|
||||
v[1].vz = -ratan2(vec.vx, vec.vy);
|
||||
RotMatrixYXZ((void *)&v[1], (void *)&M);
|
||||
|
||||
ec4c_SetRotMatrix(dbase + 0x18);
|
||||
ec4c_rotcol(&M.m[0][0]);
|
||||
ec4c_rotcol(&M.m[0][1]);
|
||||
ec4c_rotcol(&M.m[0][2]);
|
||||
ec4c_SetTransMatrix(dbase + 0x18);
|
||||
ec4c_rottrans(&M.t[0]);
|
||||
|
||||
ec4c_SetRotMatrix(&M);
|
||||
ec4c_SetTransMatrix(&M);
|
||||
|
||||
tp = D_80193538;
|
||||
for (i = 0; i < 3; i++) {
|
||||
pkt = D_800A5E60;
|
||||
k = (i * 2 + (*(u16 *)(dbase + 0xA3AA) & 1)) * 4;
|
||||
D_800A5E60 = pkt + 0x24;
|
||||
*(u32 *)(pkt + 4) = D_80193550[k];
|
||||
*(u32 *)(pkt + 0xC) = D_80193554[k];
|
||||
*(u32 *)(pkt + 0x14) = D_80193558[k];
|
||||
*(u32 *)(pkt + 0x1C) = D_8019355C[k];
|
||||
pkt[3] = 8;
|
||||
pkt[7] = 0x38;
|
||||
|
||||
v[0].vx = D_80193440[0] + *tp++;
|
||||
v[0].vy = 0;
|
||||
v[0].vz = -*(u16 *)(param_1 + 0x100);
|
||||
v[1].vx = D_80193440[0] + *tp++;
|
||||
v[1].vy = 0;
|
||||
v[1].vz = -*(u16 *)(param_1 + 0x102);
|
||||
v[2].vx = D_80193440[0] - *tp++;
|
||||
v[2].vy = 0;
|
||||
v[2].vz = -*(u16 *)(param_1 + 0x100);
|
||||
v[3].vx = D_80193440[0] - *tp++;
|
||||
v[3].vy = 0;
|
||||
v[3].vz = -*(u16 *)(param_1 + 0x102);
|
||||
|
||||
ec4c_ldv3(&v[0], &v[1], &v[2]);
|
||||
ec4c_rtpt();
|
||||
ec4c_stflg(&g.flag);
|
||||
ec4c_stsxy3(pkt + 8, pkt + 0x10, pkt + 0x18);
|
||||
ec4c_ldv0(&v[3]);
|
||||
ec4c_rtps();
|
||||
ec4c_stflg(&g.flag2);
|
||||
g.flag |= g.flag2;
|
||||
ec4c_stsxy(pkt + 0x20);
|
||||
ec4c_avsz4();
|
||||
ec4c_stotz(&g.otz);
|
||||
|
||||
if ((g.flag & ~0x1000) == 0) {
|
||||
g.otz = g.otz + 1;
|
||||
if (g.otz < 0x1000) {
|
||||
pkt[7] |= 2;
|
||||
w1 = *(u32 *)pkt;
|
||||
otp = (u32 *)((g.otz << 2) + ot);
|
||||
pk2 = D_800A5E60;
|
||||
wv = *otp & 0xFFFFFF;
|
||||
w1 &= 0xFF000000;
|
||||
*(u32 *)pkt = w1 | wv;
|
||||
w3 = *otp;
|
||||
D_800A5E60 = pk2 + 8;
|
||||
*otp = (w3 & 0xFF000000) | ((u32)pkt & 0xFFFFFF);
|
||||
pk2[3] = 1;
|
||||
w2 = *(u32 *)pk2;
|
||||
otq = (u32 *)((g.otz << 2) + ot);
|
||||
*(u32 *)(pk2 + 4) = 0xE100002A;
|
||||
w2 &= 0xFF000000;
|
||||
*(u32 *)pk2 = w2 | (*otq & 0xFFFFFF);
|
||||
*otq = (*otq & 0xFF000000) | ((u32)pk2 & 0xFFFFFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern u16 D_800B99DA;
|
||||
extern s32 D_801E1158;
|
||||
|
||||
@@ -4628,7 +4628,179 @@ void func_8017F984(s32 arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_8017F9C0);
|
||||
/* func_8017F9C0 — ov_SC06_029 / ov_SC06_029_jr_8017C954 (294 ins, 13-way jtbl switch).
|
||||
* Structural sibling of func_8017EF34 / func_8017F330 in this same TU: same jtbl shape,
|
||||
* same D_801DDB2C[5] flag loops, same shared "0x1C=0x180; 0x34++; func_8002D4C8(0x936,0)"
|
||||
* tail duplicated per case so cross-jumping re-merges it (.L8017FCEC), and the same
|
||||
* "0x34++" tail duplicated so cross-jumping re-merges it (.L8017FDC8).
|
||||
* Every symbol spelled from THIS .s's own relocation lines. D_801DDB30..3C are written as
|
||||
* D_801DDB2C[1..4] (the TU's §183 TYPE-adopted s32[5]; %hi/%lo(D_801DDB2C+4k) resolve to
|
||||
* identical bytes). Callee decls copied verbatim from the TU: func_80181170 / func_8012BEE8
|
||||
* are `void (void)` there, so the a0-passing calls go through function-pointer casts. */
|
||||
void func_8017F9C0(s32 param_1) {
|
||||
extern s32 D_801DDB2C[];
|
||||
extern s32 D_801DFD4C;
|
||||
extern u16 D_800B99DA;
|
||||
extern s32 D_80190704[];
|
||||
extern s32 D_8019070C[];
|
||||
extern s32 rand(void);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8012BEE8(void);
|
||||
extern s32 func_8012E544(s32 arg);
|
||||
extern void func_8017FE58(void *fp, s32 count);
|
||||
extern s32 func_80180FE0(s32 a0, s32 a1);
|
||||
extern void func_80181170(void);
|
||||
extern s32 func_801812AC(s32 a0);
|
||||
extern s32 func_80181334(void);
|
||||
|
||||
s32 i;
|
||||
s32 m;
|
||||
s32 *p1;
|
||||
s32 *p2;
|
||||
s32 *p3;
|
||||
s32 *p4;
|
||||
s32 *p5;
|
||||
s32 *p6;
|
||||
|
||||
switch (*(u16 *)(param_1 + 0x34)) {
|
||||
case 0:
|
||||
i = 0;
|
||||
p1 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p1 + 0xE0) |= 9;
|
||||
p1 = p1 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(s32 *)(param_1 + 0x1C) = 0x180;
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
func_8002D4C8(0x936, 0);
|
||||
goto L_end;
|
||||
|
||||
case 1:
|
||||
case 5:
|
||||
case 9:
|
||||
if (func_801812AC(0) == 0) {
|
||||
goto L_end;
|
||||
}
|
||||
func_80180FE0(param_1, rand() % 5);
|
||||
func_8017FE58((void *)param_1, D_8019070C[*(s16 *)(param_1 + 0x106)]);
|
||||
if ((*(s32 *)(param_1 + 0xE0) & 0x800) == 0) {
|
||||
if (*(s16 *)(param_1 + 0xFE) >= 3) {
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
}
|
||||
goto L_end;
|
||||
}
|
||||
if (*(s16 *)(param_1 + 0x104) != *(s16 *)(param_1 + 0xFE)) {
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
goto L_end;
|
||||
}
|
||||
if (((s32 (*)(void *))func_8012BEE8)((void *)param_1) != 0) {
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
((void (*)(s32))func_80181170)(param_1);
|
||||
}
|
||||
goto L_end;
|
||||
|
||||
case 2:
|
||||
i = 0;
|
||||
m = ~1;
|
||||
p2 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p2 + 0xE0) &= m;
|
||||
*(s32 *)(*p2 + 0xE0) |= 4;
|
||||
p2 = p2 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
goto L_end;
|
||||
|
||||
case 3:
|
||||
case 7:
|
||||
case 0xB:
|
||||
if (func_80181334() == 1) {
|
||||
*(s32 *)(param_1 + 0x1C) = 0x20;
|
||||
*(u16 *)(param_1 + 0x34) = 0xC;
|
||||
func_8002D4C8(4, 0x936);
|
||||
((void (*)(s32))func_80181170)(param_1);
|
||||
}
|
||||
goto L_end;
|
||||
|
||||
case 4:
|
||||
i = 0;
|
||||
p3 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p3 + 0xE0) |= 0xA;
|
||||
p3 = p3 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(s32 *)(param_1 + 0x1C) = 0x180;
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
func_8002D4C8(0x936, 0);
|
||||
goto L_end;
|
||||
|
||||
case 6:
|
||||
i = 0;
|
||||
m = ~2;
|
||||
p4 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p4 + 0xE0) &= m;
|
||||
*(s32 *)(*p4 + 0xE0) |= 4;
|
||||
p4 = p4 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
goto L_end;
|
||||
|
||||
case 8:
|
||||
i = 0;
|
||||
p5 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p5 + 0xE0) |= 8;
|
||||
p5 = p5 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(s32 *)(D_801DDB2C[0] + 0xE0) |= 2;
|
||||
*(s32 *)(D_801DDB2C[1] + 0xE0) |= 1;
|
||||
*(s32 *)(D_801DDB2C[2] + 0xE0) |= 2;
|
||||
*(s32 *)(D_801DDB2C[3] + 0xE0) |= 1;
|
||||
*(s32 *)(D_801DDB2C[4] + 0xE0) |= 2;
|
||||
*(s32 *)(param_1 + 0x1C) = 0x180;
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
func_8002D4C8(0x936, 0);
|
||||
goto L_end;
|
||||
|
||||
case 0xA:
|
||||
i = 0;
|
||||
p6 = D_801DDB2C;
|
||||
do {
|
||||
*(s32 *)(*p6 + 0xE0) |= 4;
|
||||
p6 = p6 + 1;
|
||||
i = i + 1;
|
||||
} while (i < 5);
|
||||
*(s32 *)(D_801DDB2C[0] + 0xE0) &= ~2;
|
||||
*(s32 *)(D_801DDB2C[1] + 0xE0) &= ~1;
|
||||
*(s32 *)(D_801DDB2C[2] + 0xE0) &= ~2;
|
||||
*(s32 *)(D_801DDB2C[3] + 0xE0) &= ~1;
|
||||
*(s32 *)(D_801DDB2C[4] + 0xE0) &= ~2;
|
||||
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
|
||||
goto L_end;
|
||||
|
||||
case 0xC:
|
||||
if (((s32 (*)(void *))func_8012BEE8)((void *)param_1) != 0) {
|
||||
if (func_8012E544(0x2EF) == 0) {
|
||||
if ((*(s32 *)(param_1 + 0xE0) & 0x800) != 0) {
|
||||
*(u16 *)(param_1 + 0x102) = 0;
|
||||
}
|
||||
*(s16 *)(param_1 + 2) = 0xA;
|
||||
}
|
||||
}
|
||||
goto L_end;
|
||||
}
|
||||
|
||||
L_end:
|
||||
D_801DFD4C = D_80190704[D_800B99DA & 1];
|
||||
((u16 *)param_1)[0x82] = ((u16 *)param_1)[0x7F];
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user