diff --git a/config/overlays.mk b/config/overlays.mk index b53057bcd..0a3ebbe48 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -43,7 +43,7 @@ ov_SC01_005_ELF := $(ov_SC01_005_OUT).elf ov_SC01_005_MAPFILE := $(ov_SC01_005_OUT).map ov_SC01_005_LD_SCRIPT := $(ov_SC01_005_OUT).ld ov_SC01_005_SPLAT_YAML := config/splat.ov_SC01_005.yaml -ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005.o,tail2.data.o,ov_SC01_005_jr_8015AE2C.o,tail3.data.o,ov_SC01_005_jr_801734BC.o,tail4.data.o,ov_SC01_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_005.o,tail2.data.o,ov_SC01_005_after.o,tail3.data.o,ov_SC01_005_jr_8015AE2C.o,tail4.data.o,ov_SC01_005_jr_801734BC.o,tail5.data.o,ov_SC01_005_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_005_CHECK_SHA := config/check.ov_SC01_005.sha ov_SC01_005_SYMBOLS := config/symbols.ov_SC01_005.txt ov_SC01_005_SIG := .run/sig.ov_SC01_005.jsonl @@ -65,7 +65,7 @@ ov_SC01_006_ELF := $(ov_SC01_006_OUT).elf ov_SC01_006_MAPFILE := $(ov_SC01_006_OUT).map ov_SC01_006_LD_SCRIPT := $(ov_SC01_006_OUT).ld ov_SC01_006_SPLAT_YAML := config/splat.ov_SC01_006.yaml -ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006.o,tail2.data.o,ov_SC01_006_jr_8015AE2C.o,tail3.data.o,ov_SC01_006_jr_801734BC.o,tail4.data.o,ov_SC01_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_006.o,tail2.data.o,ov_SC01_006_after.o,tail3.data.o,ov_SC01_006_jr_8015AE2C.o,tail4.data.o,ov_SC01_006_jr_801734BC.o,tail5.data.o,ov_SC01_006_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_006_CHECK_SHA := config/check.ov_SC01_006.sha ov_SC01_006_SYMBOLS := config/symbols.ov_SC01_006.txt ov_SC01_006_SIG := .run/sig.ov_SC01_006.jsonl @@ -87,7 +87,7 @@ ov_SC03_001_ELF := $(ov_SC03_001_OUT).elf ov_SC03_001_MAPFILE := $(ov_SC03_001_OUT).map ov_SC03_001_LD_SCRIPT := $(ov_SC03_001_OUT).ld ov_SC03_001_SPLAT_YAML := config/splat.ov_SC03_001.yaml -ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,tail2.data.o,ov_SC03_001_jr_8015AE2C.o,tail3.data.o,ov_SC03_001_jr_801734BC.o,tail4.data.o,ov_SC03_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_001.o,tail2.data.o,ov_SC03_001_after.o,tail3.data.o,ov_SC03_001_jr_8015AE2C.o,tail4.data.o,ov_SC03_001_jr_801734BC.o,tail5.data.o,ov_SC03_001_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_001_CHECK_SHA := config/check.ov_SC03_001.sha ov_SC03_001_SYMBOLS := config/symbols.ov_SC03_001.txt ov_SC03_001_SIG := .run/sig.ov_SC03_001.jsonl @@ -109,7 +109,7 @@ ov_SC01_000_ELF := $(ov_SC01_000_OUT).elf ov_SC01_000_MAPFILE := $(ov_SC01_000_OUT).map ov_SC01_000_LD_SCRIPT := $(ov_SC01_000_OUT).ld ov_SC01_000_SPLAT_YAML := config/splat.ov_SC01_000.yaml -ov_SC01_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_000.o,tail2.data.o,ov_SC01_000_jr_8015AE2C.o,tail3.data.o,ov_SC01_000_jr_801734BC.o,tail4.data.o,ov_SC01_000_jr_80178D40.o,tail5.data.o,ov_SC01_000_jr_8017BEBC.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_000.o,tail2.data.o,ov_SC01_000_after.o,tail3.data.o,ov_SC01_000_jr_8015AE2C.o,tail4.data.o,ov_SC01_000_jr_801734BC.o,tail5.data.o,ov_SC01_000_jr_80178D40.o,tail6.data.o,ov_SC01_000_jr_8017BEBC.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_000_CHECK_SHA := config/check.ov_SC01_000.sha ov_SC01_000_SYMBOLS := config/symbols.ov_SC01_000.txt ov_SC01_000_SIG := .run/sig.ov_SC01_000.jsonl @@ -131,7 +131,7 @@ ov_SC01_001_ELF := $(ov_SC01_001_OUT).elf ov_SC01_001_MAPFILE := $(ov_SC01_001_OUT).map ov_SC01_001_LD_SCRIPT := $(ov_SC01_001_OUT).ld ov_SC01_001_SPLAT_YAML := config/splat.ov_SC01_001.yaml -ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001.o,tail2.data.o,ov_SC01_001_jr_8015AE2C.o,tail3.data.o,ov_SC01_001_jr_801734BC.o,tail4.data.o,ov_SC01_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_001.o,tail2.data.o,ov_SC01_001_after.o,tail3.data.o,ov_SC01_001_jr_8015AE2C.o,tail4.data.o,ov_SC01_001_jr_801734BC.o,tail5.data.o,ov_SC01_001_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_001_CHECK_SHA := config/check.ov_SC01_001.sha ov_SC01_001_SYMBOLS := config/symbols.ov_SC01_001.txt ov_SC01_001_SIG := .run/sig.ov_SC01_001.jsonl @@ -153,7 +153,7 @@ ov_SC02_000_ELF := $(ov_SC02_000_OUT).elf ov_SC02_000_MAPFILE := $(ov_SC02_000_OUT).map ov_SC02_000_LD_SCRIPT := $(ov_SC02_000_OUT).ld ov_SC02_000_SPLAT_YAML := config/splat.ov_SC02_000.yaml -ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,tail2.data.o,ov_SC02_000_jr_8015AE2C.o,tail3.data.o,ov_SC02_000_jr_801734BC.o,tail4.data.o,ov_SC02_000_jr_80178D40.o,tail5.data.o,ov_SC02_000_jr_8017FCB0.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_000.o,tail2.data.o,ov_SC02_000_after.o,tail3.data.o,ov_SC02_000_jr_8015AE2C.o,tail4.data.o,ov_SC02_000_jr_801734BC.o,tail5.data.o,ov_SC02_000_jr_80178D40.o,tail6.data.o,ov_SC02_000_jr_8017FCB0.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_000_CHECK_SHA := config/check.ov_SC02_000.sha ov_SC02_000_SYMBOLS := config/symbols.ov_SC02_000.txt ov_SC02_000_SIG := .run/sig.ov_SC02_000.jsonl @@ -175,7 +175,7 @@ ov_SC02_003_ELF := $(ov_SC02_003_OUT).elf ov_SC02_003_MAPFILE := $(ov_SC02_003_OUT).map ov_SC02_003_LD_SCRIPT := $(ov_SC02_003_OUT).ld ov_SC02_003_SPLAT_YAML := config/splat.ov_SC02_003.yaml -ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,tail2.data.o,ov_SC02_003_jr_8015AE2C.o,tail3.data.o,ov_SC02_003_jr_801734BC.o,tail4.data.o,ov_SC02_003_jr_80178D40.o,tail5.data.o,ov_SC02_003_jr_8017FCB0.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_003.o,tail2.data.o,ov_SC02_003_after.o,tail3.data.o,ov_SC02_003_jr_8015AE2C.o,tail4.data.o,ov_SC02_003_jr_801734BC.o,tail5.data.o,ov_SC02_003_jr_80178D40.o,tail6.data.o,ov_SC02_003_jr_8017FCB0.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_003_CHECK_SHA := config/check.ov_SC02_003.sha ov_SC02_003_SYMBOLS := config/symbols.ov_SC02_003.txt ov_SC02_003_SIG := .run/sig.ov_SC02_003.jsonl @@ -197,7 +197,7 @@ ov_SC03_002_ELF := $(ov_SC03_002_OUT).elf ov_SC03_002_MAPFILE := $(ov_SC03_002_OUT).map ov_SC03_002_LD_SCRIPT := $(ov_SC03_002_OUT).ld ov_SC03_002_SPLAT_YAML := config/splat.ov_SC03_002.yaml -ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,tail2.data.o,ov_SC03_002_jr_8015AE2C.o,tail3.data.o,ov_SC03_002_jr_801734BC.o,tail4.data.o,ov_SC03_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_002.o,tail2.data.o,ov_SC03_002_after.o,tail3.data.o,ov_SC03_002_jr_8015AE2C.o,tail4.data.o,ov_SC03_002_jr_801734BC.o,tail5.data.o,ov_SC03_002_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_002_CHECK_SHA := config/check.ov_SC03_002.sha ov_SC03_002_SYMBOLS := config/symbols.ov_SC03_002.txt ov_SC03_002_SIG := .run/sig.ov_SC03_002.jsonl @@ -219,7 +219,7 @@ ov_SC03_006_ELF := $(ov_SC03_006_OUT).elf ov_SC03_006_MAPFILE := $(ov_SC03_006_OUT).map ov_SC03_006_LD_SCRIPT := $(ov_SC03_006_OUT).ld ov_SC03_006_SPLAT_YAML := config/splat.ov_SC03_006.yaml -ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006.o,tail2.data.o,ov_SC03_006_jr_8015AE2C.o,tail3.data.o,ov_SC03_006_jr_801734BC.o,tail4.data.o,ov_SC03_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_006.o,tail2.data.o,ov_SC03_006_after.o,tail3.data.o,ov_SC03_006_jr_8015AE2C.o,tail4.data.o,ov_SC03_006_jr_801734BC.o,tail5.data.o,ov_SC03_006_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_006_CHECK_SHA := config/check.ov_SC03_006.sha ov_SC03_006_SYMBOLS := config/symbols.ov_SC03_006.txt ov_SC03_006_SIG := .run/sig.ov_SC03_006.jsonl @@ -241,7 +241,7 @@ ov_SC04_000_ELF := $(ov_SC04_000_OUT).elf ov_SC04_000_MAPFILE := $(ov_SC04_000_OUT).map ov_SC04_000_LD_SCRIPT := $(ov_SC04_000_OUT).ld ov_SC04_000_SPLAT_YAML := config/splat.ov_SC04_000.yaml -ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000.o,tail2.data.o,ov_SC04_000_jr_8015AE2C.o,tail3.data.o,ov_SC04_000_jr_801734BC.o,tail4.data.o,ov_SC04_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_000.o,tail2.data.o,ov_SC04_000_after.o,tail3.data.o,ov_SC04_000_jr_8015AE2C.o,tail4.data.o,ov_SC04_000_jr_801734BC.o,tail5.data.o,ov_SC04_000_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_000_CHECK_SHA := config/check.ov_SC04_000.sha ov_SC04_000_SYMBOLS := config/symbols.ov_SC04_000.txt ov_SC04_000_SIG := .run/sig.ov_SC04_000.jsonl @@ -263,7 +263,7 @@ ov_SC04_018_ELF := $(ov_SC04_018_OUT).elf ov_SC04_018_MAPFILE := $(ov_SC04_018_OUT).map ov_SC04_018_LD_SCRIPT := $(ov_SC04_018_OUT).ld ov_SC04_018_SPLAT_YAML := config/splat.ov_SC04_018.yaml -ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,tail2.data.o,ov_SC04_018_jr_8015AE2C.o,tail3.data.o,ov_SC04_018_jr_801734BC.o,tail4.data.o,ov_SC04_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_018.o,tail2.data.o,ov_SC04_018_after.o,tail3.data.o,ov_SC04_018_jr_8015AE2C.o,tail4.data.o,ov_SC04_018_jr_801734BC.o,tail5.data.o,ov_SC04_018_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_018_CHECK_SHA := config/check.ov_SC04_018.sha ov_SC04_018_SYMBOLS := config/symbols.ov_SC04_018.txt ov_SC04_018_SIG := .run/sig.ov_SC04_018.jsonl @@ -285,7 +285,7 @@ ov_SC04_019_ELF := $(ov_SC04_019_OUT).elf ov_SC04_019_MAPFILE := $(ov_SC04_019_OUT).map ov_SC04_019_LD_SCRIPT := $(ov_SC04_019_OUT).ld ov_SC04_019_SPLAT_YAML := config/splat.ov_SC04_019.yaml -ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,tail2.data.o,ov_SC04_019_jr_8015AE2C.o,tail3.data.o,ov_SC04_019_jr_801734BC.o,tail4.data.o,ov_SC04_019_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_019.o,tail2.data.o,ov_SC04_019_after.o,tail3.data.o,ov_SC04_019_jr_8015AE2C.o,tail4.data.o,ov_SC04_019_jr_801734BC.o,tail5.data.o,ov_SC04_019_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_019_CHECK_SHA := config/check.ov_SC04_019.sha ov_SC04_019_SYMBOLS := config/symbols.ov_SC04_019.txt ov_SC04_019_SIG := .run/sig.ov_SC04_019.jsonl @@ -307,7 +307,7 @@ ov_SC05_000_ELF := $(ov_SC05_000_OUT).elf ov_SC05_000_MAPFILE := $(ov_SC05_000_OUT).map ov_SC05_000_LD_SCRIPT := $(ov_SC05_000_OUT).ld ov_SC05_000_SPLAT_YAML := config/splat.ov_SC05_000.yaml -ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000.o,tail2.data.o,ov_SC05_000_jr_8015AE2C.o,tail3.data.o,ov_SC05_000_jr_801734BC.o,tail4.data.o,ov_SC05_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_000.o,tail2.data.o,ov_SC05_000_after.o,tail3.data.o,ov_SC05_000_jr_8015AE2C.o,tail4.data.o,ov_SC05_000_jr_801734BC.o,tail5.data.o,ov_SC05_000_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_000_CHECK_SHA := config/check.ov_SC05_000.sha ov_SC05_000_SYMBOLS := config/symbols.ov_SC05_000.txt ov_SC05_000_SIG := .run/sig.ov_SC05_000.jsonl @@ -329,7 +329,7 @@ ov_SC06_000_ELF := $(ov_SC06_000_OUT).elf ov_SC06_000_MAPFILE := $(ov_SC06_000_OUT).map ov_SC06_000_LD_SCRIPT := $(ov_SC06_000_OUT).ld ov_SC06_000_SPLAT_YAML := config/splat.ov_SC06_000.yaml -ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000.o,tail2.data.o,ov_SC06_000_jr_8015AE2C.o,tail3.data.o,ov_SC06_000_jr_801734BC.o,tail4.data.o,ov_SC06_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000.o,tail2.data.o,ov_SC06_000_after.o,tail3.data.o,ov_SC06_000_jr_8015AE2C.o,tail4.data.o,ov_SC06_000_jr_801734BC.o,tail5.data.o,ov_SC06_000_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_000_CHECK_SHA := config/check.ov_SC06_000.sha ov_SC06_000_SYMBOLS := config/symbols.ov_SC06_000.txt ov_SC06_000_SIG := .run/sig.ov_SC06_000.jsonl @@ -351,7 +351,7 @@ ov_SC07_000_ELF := $(ov_SC07_000_OUT).elf ov_SC07_000_MAPFILE := $(ov_SC07_000_OUT).map ov_SC07_000_LD_SCRIPT := $(ov_SC07_000_OUT).ld ov_SC07_000_SPLAT_YAML := config/splat.ov_SC07_000.yaml -ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000.o,tail2.data.o,ov_SC07_000_jr_8015AE2C.o,tail3.data.o,ov_SC07_000_jr_801734BC.o,tail4.data.o,ov_SC07_000_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_000.o,tail2.data.o,ov_SC07_000_after.o,tail3.data.o,ov_SC07_000_jr_8015AE2C.o,tail4.data.o,ov_SC07_000_jr_801734BC.o,tail5.data.o,ov_SC07_000_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_000_CHECK_SHA := config/check.ov_SC07_000.sha ov_SC07_000_SYMBOLS := config/symbols.ov_SC07_000.txt ov_SC07_000_SIG := .run/sig.ov_SC07_000.jsonl @@ -373,7 +373,7 @@ ov_SC01_004_ELF := $(ov_SC01_004_OUT).elf ov_SC01_004_MAPFILE := $(ov_SC01_004_OUT).map ov_SC01_004_LD_SCRIPT := $(ov_SC01_004_OUT).ld ov_SC01_004_SPLAT_YAML := config/splat.ov_SC01_004.yaml -ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004.o,tail2.data.o,ov_SC01_004_jr_8015AE2C.o,tail3.data.o,ov_SC01_004_jr_801734BC.o,tail4.data.o,ov_SC01_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_004.o,tail2.data.o,ov_SC01_004_after.o,tail3.data.o,ov_SC01_004_jr_8015AE2C.o,tail4.data.o,ov_SC01_004_jr_801734BC.o,tail5.data.o,ov_SC01_004_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_004_CHECK_SHA := config/check.ov_SC01_004.sha ov_SC01_004_SYMBOLS := config/symbols.ov_SC01_004.txt ov_SC01_004_SIG := .run/sig.ov_SC01_004.jsonl @@ -395,7 +395,7 @@ ov_SC01_008_ELF := $(ov_SC01_008_OUT).elf ov_SC01_008_MAPFILE := $(ov_SC01_008_OUT).map ov_SC01_008_LD_SCRIPT := $(ov_SC01_008_OUT).ld ov_SC01_008_SPLAT_YAML := config/splat.ov_SC01_008.yaml -ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008.o,tail2.data.o,ov_SC01_008_jr_8015AE2C.o,tail3.data.o,ov_SC01_008_jr_801734BC.o,tail4.data.o,ov_SC01_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_008.o,tail2.data.o,ov_SC01_008_after.o,tail3.data.o,ov_SC01_008_jr_8015AE2C.o,tail4.data.o,ov_SC01_008_jr_801734BC.o,tail5.data.o,ov_SC01_008_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_008_CHECK_SHA := config/check.ov_SC01_008.sha ov_SC01_008_SYMBOLS := config/symbols.ov_SC01_008.txt ov_SC01_008_SIG := .run/sig.ov_SC01_008.jsonl @@ -417,7 +417,7 @@ ov_SC01_009_ELF := $(ov_SC01_009_OUT).elf ov_SC01_009_MAPFILE := $(ov_SC01_009_OUT).map ov_SC01_009_LD_SCRIPT := $(ov_SC01_009_OUT).ld ov_SC01_009_SPLAT_YAML := config/splat.ov_SC01_009.yaml -ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,tail2.data.o,ov_SC01_009_jr_8015AE2C.o,tail3.data.o,ov_SC01_009_jr_801734BC.o,tail4.data.o,ov_SC01_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,tail2.data.o,ov_SC01_009_after.o,tail3.data.o,ov_SC01_009_jr_8015AE2C.o,tail4.data.o,ov_SC01_009_jr_801734BC.o,tail5.data.o,ov_SC01_009_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_009_CHECK_SHA := config/check.ov_SC01_009.sha ov_SC01_009_SYMBOLS := config/symbols.ov_SC01_009.txt ov_SC01_009_SIG := .run/sig.ov_SC01_009.jsonl @@ -439,7 +439,7 @@ ov_SC01_074_ELF := $(ov_SC01_074_OUT).elf ov_SC01_074_MAPFILE := $(ov_SC01_074_OUT).map ov_SC01_074_LD_SCRIPT := $(ov_SC01_074_OUT).ld ov_SC01_074_SPLAT_YAML := config/splat.ov_SC01_074.yaml -ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074.o,tail2.data.o,ov_SC01_074_jr_8015AE2C.o,tail3.data.o,ov_SC01_074_jr_801734BC.o,tail4.data.o,ov_SC01_074_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_074_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_074.o,tail2.data.o,ov_SC01_074_after.o,tail3.data.o,ov_SC01_074_jr_8015AE2C.o,tail4.data.o,ov_SC01_074_jr_801734BC.o,tail5.data.o,ov_SC01_074_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_074_CHECK_SHA := config/check.ov_SC01_074.sha ov_SC01_074_SYMBOLS := config/symbols.ov_SC01_074.txt ov_SC01_074_SIG := .run/sig.ov_SC01_074.jsonl @@ -461,7 +461,7 @@ ov_SC01_080_ELF := $(ov_SC01_080_OUT).elf ov_SC01_080_MAPFILE := $(ov_SC01_080_OUT).map ov_SC01_080_LD_SCRIPT := $(ov_SC01_080_OUT).ld ov_SC01_080_SPLAT_YAML := config/splat.ov_SC01_080.yaml -ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080.o,tail2.data.o,ov_SC01_080_jr_8015AE2C.o,tail3.data.o,ov_SC01_080_jr_801734BC.o,tail4.data.o,ov_SC01_080_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_080_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_080.o,tail2.data.o,ov_SC01_080_after.o,tail3.data.o,ov_SC01_080_jr_8015AE2C.o,tail4.data.o,ov_SC01_080_jr_801734BC.o,tail5.data.o,ov_SC01_080_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_080_CHECK_SHA := config/check.ov_SC01_080.sha ov_SC01_080_SYMBOLS := config/symbols.ov_SC01_080.txt ov_SC01_080_SIG := .run/sig.ov_SC01_080.jsonl @@ -483,7 +483,7 @@ ov_SC01_084_ELF := $(ov_SC01_084_OUT).elf ov_SC01_084_MAPFILE := $(ov_SC01_084_OUT).map ov_SC01_084_LD_SCRIPT := $(ov_SC01_084_OUT).ld ov_SC01_084_SPLAT_YAML := config/splat.ov_SC01_084.yaml -ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084.o,tail2.data.o,ov_SC01_084_jr_8015AE2C.o,tail3.data.o,ov_SC01_084_jr_801734BC.o,tail4.data.o,ov_SC01_084_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_084_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_084.o,tail2.data.o,ov_SC01_084_after.o,tail3.data.o,ov_SC01_084_jr_8015AE2C.o,tail4.data.o,ov_SC01_084_jr_801734BC.o,tail5.data.o,ov_SC01_084_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_084_CHECK_SHA := config/check.ov_SC01_084.sha ov_SC01_084_SYMBOLS := config/symbols.ov_SC01_084.txt ov_SC01_084_SIG := .run/sig.ov_SC01_084.jsonl @@ -505,7 +505,7 @@ ov_SC02_004_ELF := $(ov_SC02_004_OUT).elf ov_SC02_004_MAPFILE := $(ov_SC02_004_OUT).map ov_SC02_004_LD_SCRIPT := $(ov_SC02_004_OUT).ld ov_SC02_004_SPLAT_YAML := config/splat.ov_SC02_004.yaml -ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004.o,tail2.data.o,ov_SC02_004_jr_8015AE2C.o,tail3.data.o,ov_SC02_004_jr_801734BC.o,tail4.data.o,ov_SC02_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_004.o,tail2.data.o,ov_SC02_004_after.o,tail3.data.o,ov_SC02_004_jr_8015AE2C.o,tail4.data.o,ov_SC02_004_jr_801734BC.o,tail5.data.o,ov_SC02_004_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_004_CHECK_SHA := config/check.ov_SC02_004.sha ov_SC02_004_SYMBOLS := config/symbols.ov_SC02_004.txt ov_SC02_004_SIG := .run/sig.ov_SC02_004.jsonl @@ -527,7 +527,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,tail2.data.o,ov_SC02_005_jr_8015AE2C.o,tail3.data.o,ov_SC02_005_jr_801734BC.o,tail4.data.o,ov_SC02_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_005.o,tail2.data.o,ov_SC02_005_after.o,tail3.data.o,ov_SC02_005_jr_8015AE2C.o,tail4.data.o,ov_SC02_005_jr_801734BC.o,tail5.data.o,ov_SC02_005_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_005_CHECK_SHA := config/check.ov_SC02_005.sha ov_SC02_005_SYMBOLS := config/symbols.ov_SC02_005.txt ov_SC02_005_SIG := .run/sig.ov_SC02_005.jsonl @@ -549,7 +549,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,tail2.data.o,ov_SC02_011_jr_8015AE2C.o,tail3.data.o,ov_SC02_011_jr_801734BC.o,tail4.data.o,ov_SC02_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_011.o,tail2.data.o,ov_SC02_011_after.o,tail3.data.o,ov_SC02_011_jr_8015AE2C.o,tail4.data.o,ov_SC02_011_jr_801734BC.o,tail5.data.o,ov_SC02_011_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_011_CHECK_SHA := config/check.ov_SC02_011.sha ov_SC02_011_SYMBOLS := config/symbols.ov_SC02_011.txt ov_SC02_011_SIG := .run/sig.ov_SC02_011.jsonl @@ -571,7 +571,7 @@ ov_SC02_015_ELF := $(ov_SC02_015_OUT).elf ov_SC02_015_MAPFILE := $(ov_SC02_015_OUT).map ov_SC02_015_LD_SCRIPT := $(ov_SC02_015_OUT).ld ov_SC02_015_SPLAT_YAML := config/splat.ov_SC02_015.yaml -ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015.o,tail2.data.o,ov_SC02_015_jr_8015AE2C.o,tail3.data.o,ov_SC02_015_jr_801734BC.o,tail4.data.o,ov_SC02_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_015.o,tail2.data.o,ov_SC02_015_after.o,tail3.data.o,ov_SC02_015_jr_8015AE2C.o,tail4.data.o,ov_SC02_015_jr_801734BC.o,tail5.data.o,ov_SC02_015_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_015_CHECK_SHA := config/check.ov_SC02_015.sha ov_SC02_015_SYMBOLS := config/symbols.ov_SC02_015.txt ov_SC02_015_SIG := .run/sig.ov_SC02_015.jsonl @@ -593,7 +593,7 @@ ov_SC02_016_ELF := $(ov_SC02_016_OUT).elf ov_SC02_016_MAPFILE := $(ov_SC02_016_OUT).map ov_SC02_016_LD_SCRIPT := $(ov_SC02_016_OUT).ld ov_SC02_016_SPLAT_YAML := config/splat.ov_SC02_016.yaml -ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016.o,tail2.data.o,ov_SC02_016_jr_8015AE2C.o,tail3.data.o,ov_SC02_016_jr_801734BC.o,tail4.data.o,ov_SC02_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016.o,tail2.data.o,ov_SC02_016_after.o,tail3.data.o,ov_SC02_016_jr_8015AE2C.o,tail4.data.o,ov_SC02_016_jr_801734BC.o,tail5.data.o,ov_SC02_016_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_016_CHECK_SHA := config/check.ov_SC02_016.sha ov_SC02_016_SYMBOLS := config/symbols.ov_SC02_016.txt ov_SC02_016_SIG := .run/sig.ov_SC02_016.jsonl @@ -615,7 +615,7 @@ ov_SC02_017_ELF := $(ov_SC02_017_OUT).elf ov_SC02_017_MAPFILE := $(ov_SC02_017_OUT).map ov_SC02_017_LD_SCRIPT := $(ov_SC02_017_OUT).ld ov_SC02_017_SPLAT_YAML := config/splat.ov_SC02_017.yaml -ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017.o,tail2.data.o,ov_SC02_017_jr_8015AE2C.o,tail3.data.o,ov_SC02_017_jr_801734BC.o,tail4.data.o,ov_SC02_017_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_017.o,tail2.data.o,ov_SC02_017_after.o,tail3.data.o,ov_SC02_017_jr_8015AE2C.o,tail4.data.o,ov_SC02_017_jr_801734BC.o,tail5.data.o,ov_SC02_017_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_017_CHECK_SHA := config/check.ov_SC02_017.sha ov_SC02_017_SYMBOLS := config/symbols.ov_SC02_017.txt ov_SC02_017_SIG := .run/sig.ov_SC02_017.jsonl @@ -637,7 +637,7 @@ ov_SC02_021_ELF := $(ov_SC02_021_OUT).elf ov_SC02_021_MAPFILE := $(ov_SC02_021_OUT).map ov_SC02_021_LD_SCRIPT := $(ov_SC02_021_OUT).ld ov_SC02_021_SPLAT_YAML := config/splat.ov_SC02_021.yaml -ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021.o,tail2.data.o,ov_SC02_021_jr_8015AE2C.o,tail3.data.o,ov_SC02_021_jr_801734BC.o,tail4.data.o,ov_SC02_021_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021.o,tail2.data.o,ov_SC02_021_after.o,tail3.data.o,ov_SC02_021_jr_8015AE2C.o,tail4.data.o,ov_SC02_021_jr_801734BC.o,tail5.data.o,ov_SC02_021_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_021_CHECK_SHA := config/check.ov_SC02_021.sha ov_SC02_021_SYMBOLS := config/symbols.ov_SC02_021.txt ov_SC02_021_SIG := .run/sig.ov_SC02_021.jsonl @@ -659,7 +659,7 @@ ov_SC02_026_ELF := $(ov_SC02_026_OUT).elf ov_SC02_026_MAPFILE := $(ov_SC02_026_OUT).map ov_SC02_026_LD_SCRIPT := $(ov_SC02_026_OUT).ld ov_SC02_026_SPLAT_YAML := config/splat.ov_SC02_026.yaml -ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026.o,tail2.data.o,ov_SC02_026_jr_8015AE2C.o,tail3.data.o,ov_SC02_026_jr_801734BC.o,tail4.data.o,ov_SC02_026_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_026_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_026.o,tail2.data.o,ov_SC02_026_after.o,tail3.data.o,ov_SC02_026_jr_8015AE2C.o,tail4.data.o,ov_SC02_026_jr_801734BC.o,tail5.data.o,ov_SC02_026_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_026_CHECK_SHA := config/check.ov_SC02_026.sha ov_SC02_026_SYMBOLS := config/symbols.ov_SC02_026.txt ov_SC02_026_SIG := .run/sig.ov_SC02_026.jsonl @@ -681,7 +681,7 @@ ov_SC02_027_ELF := $(ov_SC02_027_OUT).elf ov_SC02_027_MAPFILE := $(ov_SC02_027_OUT).map ov_SC02_027_LD_SCRIPT := $(ov_SC02_027_OUT).ld ov_SC02_027_SPLAT_YAML := config/splat.ov_SC02_027.yaml -ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027.o,tail2.data.o,ov_SC02_027_jr_8015AE2C.o,tail3.data.o,ov_SC02_027_jr_801734BC.o,tail4.data.o,ov_SC02_027_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_027.o,tail2.data.o,ov_SC02_027_after.o,tail3.data.o,ov_SC02_027_jr_8015AE2C.o,tail4.data.o,ov_SC02_027_jr_801734BC.o,tail5.data.o,ov_SC02_027_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_027_CHECK_SHA := config/check.ov_SC02_027.sha ov_SC02_027_SYMBOLS := config/symbols.ov_SC02_027.txt ov_SC02_027_SIG := .run/sig.ov_SC02_027.jsonl @@ -703,7 +703,7 @@ ov_SC02_028_ELF := $(ov_SC02_028_OUT).elf ov_SC02_028_MAPFILE := $(ov_SC02_028_OUT).map ov_SC02_028_LD_SCRIPT := $(ov_SC02_028_OUT).ld ov_SC02_028_SPLAT_YAML := config/splat.ov_SC02_028.yaml -ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028.o,tail2.data.o,ov_SC02_028_jr_8015AE2C.o,tail3.data.o,ov_SC02_028_jr_801734BC.o,tail4.data.o,ov_SC02_028_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_028.o,tail2.data.o,ov_SC02_028_after.o,tail3.data.o,ov_SC02_028_jr_8015AE2C.o,tail4.data.o,ov_SC02_028_jr_801734BC.o,tail5.data.o,ov_SC02_028_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_028_CHECK_SHA := config/check.ov_SC02_028.sha ov_SC02_028_SYMBOLS := config/symbols.ov_SC02_028.txt ov_SC02_028_SIG := .run/sig.ov_SC02_028.jsonl @@ -725,7 +725,7 @@ ov_SC02_031_ELF := $(ov_SC02_031_OUT).elf ov_SC02_031_MAPFILE := $(ov_SC02_031_OUT).map ov_SC02_031_LD_SCRIPT := $(ov_SC02_031_OUT).ld ov_SC02_031_SPLAT_YAML := config/splat.ov_SC02_031.yaml -ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031.o,tail2.data.o,ov_SC02_031_jr_8015AE2C.o,tail3.data.o,ov_SC02_031_jr_801734BC.o,tail4.data.o,ov_SC02_031_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_031.o,tail2.data.o,ov_SC02_031_after.o,tail3.data.o,ov_SC02_031_jr_8015AE2C.o,tail4.data.o,ov_SC02_031_jr_801734BC.o,tail5.data.o,ov_SC02_031_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_031_CHECK_SHA := config/check.ov_SC02_031.sha ov_SC02_031_SYMBOLS := config/symbols.ov_SC02_031.txt ov_SC02_031_SIG := .run/sig.ov_SC02_031.jsonl @@ -747,7 +747,7 @@ ov_SC02_035_ELF := $(ov_SC02_035_OUT).elf ov_SC02_035_MAPFILE := $(ov_SC02_035_OUT).map ov_SC02_035_LD_SCRIPT := $(ov_SC02_035_OUT).ld ov_SC02_035_SPLAT_YAML := config/splat.ov_SC02_035.yaml -ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035.o,tail2.data.o,ov_SC02_035_jr_8015AE2C.o,tail3.data.o,ov_SC02_035_jr_801734BC.o,tail4.data.o,ov_SC02_035_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_035_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_035.o,tail2.data.o,ov_SC02_035_after.o,tail3.data.o,ov_SC02_035_jr_8015AE2C.o,tail4.data.o,ov_SC02_035_jr_801734BC.o,tail5.data.o,ov_SC02_035_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_035_CHECK_SHA := config/check.ov_SC02_035.sha ov_SC02_035_SYMBOLS := config/symbols.ov_SC02_035.txt ov_SC02_035_SIG := .run/sig.ov_SC02_035.jsonl @@ -769,7 +769,7 @@ ov_SC02_039_ELF := $(ov_SC02_039_OUT).elf ov_SC02_039_MAPFILE := $(ov_SC02_039_OUT).map ov_SC02_039_LD_SCRIPT := $(ov_SC02_039_OUT).ld ov_SC02_039_SPLAT_YAML := config/splat.ov_SC02_039.yaml -ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039.o,tail2.data.o,ov_SC02_039_jr_8015AE2C.o,tail3.data.o,ov_SC02_039_jr_801734BC.o,tail4.data.o,ov_SC02_039_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_039_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_039.o,tail2.data.o,ov_SC02_039_after.o,tail3.data.o,ov_SC02_039_jr_8015AE2C.o,tail4.data.o,ov_SC02_039_jr_801734BC.o,tail5.data.o,ov_SC02_039_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_039_CHECK_SHA := config/check.ov_SC02_039.sha ov_SC02_039_SYMBOLS := config/symbols.ov_SC02_039.txt ov_SC02_039_SIG := .run/sig.ov_SC02_039.jsonl @@ -791,7 +791,7 @@ ov_SC02_041_ELF := $(ov_SC02_041_OUT).elf ov_SC02_041_MAPFILE := $(ov_SC02_041_OUT).map ov_SC02_041_LD_SCRIPT := $(ov_SC02_041_OUT).ld ov_SC02_041_SPLAT_YAML := config/splat.ov_SC02_041.yaml -ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041.o,tail2.data.o,ov_SC02_041_jr_8015AE2C.o,tail3.data.o,ov_SC02_041_jr_801734BC.o,tail4.data.o,ov_SC02_041_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_041_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_041.o,tail2.data.o,ov_SC02_041_after.o,tail3.data.o,ov_SC02_041_jr_8015AE2C.o,tail4.data.o,ov_SC02_041_jr_801734BC.o,tail5.data.o,ov_SC02_041_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_041_CHECK_SHA := config/check.ov_SC02_041.sha ov_SC02_041_SYMBOLS := config/symbols.ov_SC02_041.txt ov_SC02_041_SIG := .run/sig.ov_SC02_041.jsonl @@ -813,7 +813,7 @@ ov_SC03_003_ELF := $(ov_SC03_003_OUT).elf ov_SC03_003_MAPFILE := $(ov_SC03_003_OUT).map ov_SC03_003_LD_SCRIPT := $(ov_SC03_003_OUT).ld ov_SC03_003_SPLAT_YAML := config/splat.ov_SC03_003.yaml -ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003.o,tail2.data.o,ov_SC03_003_jr_8015AE2C.o,tail3.data.o,ov_SC03_003_jr_801734BC.o,tail4.data.o,ov_SC03_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_003.o,tail2.data.o,ov_SC03_003_after.o,tail3.data.o,ov_SC03_003_jr_8015AE2C.o,tail4.data.o,ov_SC03_003_jr_801734BC.o,tail5.data.o,ov_SC03_003_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_003_CHECK_SHA := config/check.ov_SC03_003.sha ov_SC03_003_SYMBOLS := config/symbols.ov_SC03_003.txt ov_SC03_003_SIG := .run/sig.ov_SC03_003.jsonl @@ -835,7 +835,7 @@ ov_SC03_007_ELF := $(ov_SC03_007_OUT).elf ov_SC03_007_MAPFILE := $(ov_SC03_007_OUT).map ov_SC03_007_LD_SCRIPT := $(ov_SC03_007_OUT).ld ov_SC03_007_SPLAT_YAML := config/splat.ov_SC03_007.yaml -ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007.o,tail2.data.o,ov_SC03_007_jr_8015AE2C.o,tail3.data.o,ov_SC03_007_jr_801734BC.o,tail4.data.o,ov_SC03_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_007.o,tail2.data.o,ov_SC03_007_after.o,tail3.data.o,ov_SC03_007_jr_8015AE2C.o,tail4.data.o,ov_SC03_007_jr_801734BC.o,tail5.data.o,ov_SC03_007_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_007_CHECK_SHA := config/check.ov_SC03_007.sha ov_SC03_007_SYMBOLS := config/symbols.ov_SC03_007.txt ov_SC03_007_SIG := .run/sig.ov_SC03_007.jsonl @@ -857,7 +857,7 @@ ov_SC03_010_ELF := $(ov_SC03_010_OUT).elf ov_SC03_010_MAPFILE := $(ov_SC03_010_OUT).map ov_SC03_010_LD_SCRIPT := $(ov_SC03_010_OUT).ld ov_SC03_010_SPLAT_YAML := config/splat.ov_SC03_010.yaml -ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010.o,tail2.data.o,ov_SC03_010_jr_8015AE2C.o,tail3.data.o,ov_SC03_010_jr_801734BC.o,tail4.data.o,ov_SC03_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_010.o,tail2.data.o,ov_SC03_010_after.o,tail3.data.o,ov_SC03_010_jr_8015AE2C.o,tail4.data.o,ov_SC03_010_jr_801734BC.o,tail5.data.o,ov_SC03_010_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_010_CHECK_SHA := config/check.ov_SC03_010.sha ov_SC03_010_SYMBOLS := config/symbols.ov_SC03_010.txt ov_SC03_010_SIG := .run/sig.ov_SC03_010.jsonl @@ -879,7 +879,7 @@ ov_SC03_011_ELF := $(ov_SC03_011_OUT).elf ov_SC03_011_MAPFILE := $(ov_SC03_011_OUT).map ov_SC03_011_LD_SCRIPT := $(ov_SC03_011_OUT).ld ov_SC03_011_SPLAT_YAML := config/splat.ov_SC03_011.yaml -ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011.o,tail2.data.o,ov_SC03_011_jr_8015AE2C.o,tail3.data.o,ov_SC03_011_jr_801734BC.o,tail4.data.o,ov_SC03_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011.o,tail2.data.o,ov_SC03_011_after.o,tail3.data.o,ov_SC03_011_jr_8015AE2C.o,tail4.data.o,ov_SC03_011_jr_801734BC.o,tail5.data.o,ov_SC03_011_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_011_CHECK_SHA := config/check.ov_SC03_011.sha ov_SC03_011_SYMBOLS := config/symbols.ov_SC03_011.txt ov_SC03_011_SIG := .run/sig.ov_SC03_011.jsonl @@ -901,7 +901,7 @@ ov_SC03_012_ELF := $(ov_SC03_012_OUT).elf ov_SC03_012_MAPFILE := $(ov_SC03_012_OUT).map ov_SC03_012_LD_SCRIPT := $(ov_SC03_012_OUT).ld ov_SC03_012_SPLAT_YAML := config/splat.ov_SC03_012.yaml -ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012.o,tail2.data.o,ov_SC03_012_jr_8015AE2C.o,tail3.data.o,ov_SC03_012_jr_801734BC.o,tail4.data.o,ov_SC03_012_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_012.o,tail2.data.o,ov_SC03_012_after.o,tail3.data.o,ov_SC03_012_jr_8015AE2C.o,tail4.data.o,ov_SC03_012_jr_801734BC.o,tail5.data.o,ov_SC03_012_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_012_CHECK_SHA := config/check.ov_SC03_012.sha ov_SC03_012_SYMBOLS := config/symbols.ov_SC03_012.txt ov_SC03_012_SIG := .run/sig.ov_SC03_012.jsonl @@ -923,7 +923,7 @@ ov_SC03_013_ELF := $(ov_SC03_013_OUT).elf ov_SC03_013_MAPFILE := $(ov_SC03_013_OUT).map ov_SC03_013_LD_SCRIPT := $(ov_SC03_013_OUT).ld ov_SC03_013_SPLAT_YAML := config/splat.ov_SC03_013.yaml -ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013.o,tail2.data.o,ov_SC03_013_jr_8015AE2C.o,tail3.data.o,ov_SC03_013_jr_801734BC.o,tail4.data.o,ov_SC03_013_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_013.o,tail2.data.o,ov_SC03_013_after.o,tail3.data.o,ov_SC03_013_jr_8015AE2C.o,tail4.data.o,ov_SC03_013_jr_801734BC.o,tail5.data.o,ov_SC03_013_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_013_CHECK_SHA := config/check.ov_SC03_013.sha ov_SC03_013_SYMBOLS := config/symbols.ov_SC03_013.txt ov_SC03_013_SIG := .run/sig.ov_SC03_013.jsonl @@ -945,7 +945,7 @@ ov_SC03_014_ELF := $(ov_SC03_014_OUT).elf ov_SC03_014_MAPFILE := $(ov_SC03_014_OUT).map ov_SC03_014_LD_SCRIPT := $(ov_SC03_014_OUT).ld ov_SC03_014_SPLAT_YAML := config/splat.ov_SC03_014.yaml -ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014.o,tail2.data.o,ov_SC03_014_jr_8015AE2C.o,tail3.data.o,ov_SC03_014_jr_801734BC.o,tail4.data.o,ov_SC03_014_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_014.o,tail2.data.o,ov_SC03_014_after.o,tail3.data.o,ov_SC03_014_jr_8015AE2C.o,tail4.data.o,ov_SC03_014_jr_801734BC.o,tail5.data.o,ov_SC03_014_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_014_CHECK_SHA := config/check.ov_SC03_014.sha ov_SC03_014_SYMBOLS := config/symbols.ov_SC03_014.txt ov_SC03_014_SIG := .run/sig.ov_SC03_014.jsonl @@ -967,7 +967,7 @@ ov_SC03_015_ELF := $(ov_SC03_015_OUT).elf ov_SC03_015_MAPFILE := $(ov_SC03_015_OUT).map ov_SC03_015_LD_SCRIPT := $(ov_SC03_015_OUT).ld ov_SC03_015_SPLAT_YAML := config/splat.ov_SC03_015.yaml -ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015.o,tail2.data.o,ov_SC03_015_jr_8015AE2C.o,tail3.data.o,ov_SC03_015_jr_801734BC.o,tail4.data.o,ov_SC03_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_015.o,tail2.data.o,ov_SC03_015_after.o,tail3.data.o,ov_SC03_015_jr_8015AE2C.o,tail4.data.o,ov_SC03_015_jr_801734BC.o,tail5.data.o,ov_SC03_015_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_015_CHECK_SHA := config/check.ov_SC03_015.sha ov_SC03_015_SYMBOLS := config/symbols.ov_SC03_015.txt ov_SC03_015_SIG := .run/sig.ov_SC03_015.jsonl @@ -989,7 +989,7 @@ ov_SC03_023_ELF := $(ov_SC03_023_OUT).elf ov_SC03_023_MAPFILE := $(ov_SC03_023_OUT).map ov_SC03_023_LD_SCRIPT := $(ov_SC03_023_OUT).ld ov_SC03_023_SPLAT_YAML := config/splat.ov_SC03_023.yaml -ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023.o,tail2.data.o,ov_SC03_023_jr_8015AE2C.o,tail3.data.o,ov_SC03_023_jr_801734BC.o,tail4.data.o,ov_SC03_023_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_023_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_023.o,tail2.data.o,ov_SC03_023_after.o,tail3.data.o,ov_SC03_023_jr_8015AE2C.o,tail4.data.o,ov_SC03_023_jr_801734BC.o,tail5.data.o,ov_SC03_023_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_023_CHECK_SHA := config/check.ov_SC03_023.sha ov_SC03_023_SYMBOLS := config/symbols.ov_SC03_023.txt ov_SC03_023_SIG := .run/sig.ov_SC03_023.jsonl @@ -1011,7 +1011,7 @@ ov_SC03_024_ELF := $(ov_SC03_024_OUT).elf ov_SC03_024_MAPFILE := $(ov_SC03_024_OUT).map ov_SC03_024_LD_SCRIPT := $(ov_SC03_024_OUT).ld ov_SC03_024_SPLAT_YAML := config/splat.ov_SC03_024.yaml -ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024.o,tail2.data.o,ov_SC03_024_jr_8015AE2C.o,tail3.data.o,ov_SC03_024_jr_801734BC.o,tail4.data.o,ov_SC03_024_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_024.o,tail2.data.o,ov_SC03_024_after.o,tail3.data.o,ov_SC03_024_jr_8015AE2C.o,tail4.data.o,ov_SC03_024_jr_801734BC.o,tail5.data.o,ov_SC03_024_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_024_CHECK_SHA := config/check.ov_SC03_024.sha ov_SC03_024_SYMBOLS := config/symbols.ov_SC03_024.txt ov_SC03_024_SIG := .run/sig.ov_SC03_024.jsonl @@ -1033,7 +1033,7 @@ ov_SC03_028_ELF := $(ov_SC03_028_OUT).elf ov_SC03_028_MAPFILE := $(ov_SC03_028_OUT).map ov_SC03_028_LD_SCRIPT := $(ov_SC03_028_OUT).ld ov_SC03_028_SPLAT_YAML := config/splat.ov_SC03_028.yaml -ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028.o,tail2.data.o,ov_SC03_028_jr_8015AE2C.o,tail3.data.o,ov_SC03_028_jr_801734BC.o,tail4.data.o,ov_SC03_028_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_028_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_028.o,tail2.data.o,ov_SC03_028_after.o,tail3.data.o,ov_SC03_028_jr_8015AE2C.o,tail4.data.o,ov_SC03_028_jr_801734BC.o,tail5.data.o,ov_SC03_028_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_028_CHECK_SHA := config/check.ov_SC03_028.sha ov_SC03_028_SYMBOLS := config/symbols.ov_SC03_028.txt ov_SC03_028_SIG := .run/sig.ov_SC03_028.jsonl @@ -1055,7 +1055,7 @@ ov_SC03_029_ELF := $(ov_SC03_029_OUT).elf ov_SC03_029_MAPFILE := $(ov_SC03_029_OUT).map ov_SC03_029_LD_SCRIPT := $(ov_SC03_029_OUT).ld ov_SC03_029_SPLAT_YAML := config/splat.ov_SC03_029.yaml -ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029.o,tail2.data.o,ov_SC03_029_jr_8015AE2C.o,tail3.data.o,ov_SC03_029_jr_801734BC.o,tail4.data.o,ov_SC03_029_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_029.o,tail2.data.o,ov_SC03_029_after.o,tail3.data.o,ov_SC03_029_jr_8015AE2C.o,tail4.data.o,ov_SC03_029_jr_801734BC.o,tail5.data.o,ov_SC03_029_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_029_CHECK_SHA := config/check.ov_SC03_029.sha ov_SC03_029_SYMBOLS := config/symbols.ov_SC03_029.txt ov_SC03_029_SIG := .run/sig.ov_SC03_029.jsonl @@ -1077,7 +1077,7 @@ ov_SC03_030_ELF := $(ov_SC03_030_OUT).elf ov_SC03_030_MAPFILE := $(ov_SC03_030_OUT).map ov_SC03_030_LD_SCRIPT := $(ov_SC03_030_OUT).ld ov_SC03_030_SPLAT_YAML := config/splat.ov_SC03_030.yaml -ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030.o,tail2.data.o,ov_SC03_030_jr_8015AE2C.o,tail3.data.o,ov_SC03_030_jr_801734BC.o,tail4.data.o,ov_SC03_030_jr_80178D40.o,tail5.data.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030.o,tail2.data.o,ov_SC03_030_after.o,tail3.data.o,ov_SC03_030_jr_8015AE2C.o,tail4.data.o,ov_SC03_030_jr_801734BC.o,tail5.data.o,ov_SC03_030_jr_80178D40.o,tail6.data.o # Phase-26 §8 jtbl-rodata carve ov_SC03_030_CHECK_SHA := config/check.ov_SC03_030.sha ov_SC03_030_SYMBOLS := config/symbols.ov_SC03_030.txt ov_SC03_030_SIG := .run/sig.ov_SC03_030.jsonl @@ -1099,7 +1099,7 @@ ov_SC03_031_ELF := $(ov_SC03_031_OUT).elf ov_SC03_031_MAPFILE := $(ov_SC03_031_OUT).map ov_SC03_031_LD_SCRIPT := $(ov_SC03_031_OUT).ld ov_SC03_031_SPLAT_YAML := config/splat.ov_SC03_031.yaml -ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031.o,tail2.data.o,ov_SC03_031_jr_8015AE2C.o,tail3.data.o,ov_SC03_031_jr_801734BC.o,tail4.data.o,ov_SC03_031_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_031_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_031.o,tail2.data.o,ov_SC03_031_after.o,tail3.data.o,ov_SC03_031_jr_8015AE2C.o,tail4.data.o,ov_SC03_031_jr_801734BC.o,tail5.data.o,ov_SC03_031_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_031_CHECK_SHA := config/check.ov_SC03_031.sha ov_SC03_031_SYMBOLS := config/symbols.ov_SC03_031.txt ov_SC03_031_SIG := .run/sig.ov_SC03_031.jsonl @@ -1121,7 +1121,7 @@ ov_SC03_089_ELF := $(ov_SC03_089_OUT).elf ov_SC03_089_MAPFILE := $(ov_SC03_089_OUT).map ov_SC03_089_LD_SCRIPT := $(ov_SC03_089_OUT).ld ov_SC03_089_SPLAT_YAML := config/splat.ov_SC03_089.yaml -ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089.o,tail2.data.o,ov_SC03_089_jr_8015AE2C.o,tail3.data.o,ov_SC03_089_jr_801734BC.o,tail4.data.o,ov_SC03_089_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_089_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_089.o,tail2.data.o,ov_SC03_089_after.o,tail3.data.o,ov_SC03_089_jr_8015AE2C.o,tail4.data.o,ov_SC03_089_jr_801734BC.o,tail5.data.o,ov_SC03_089_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_089_CHECK_SHA := config/check.ov_SC03_089.sha ov_SC03_089_SYMBOLS := config/symbols.ov_SC03_089.txt ov_SC03_089_SIG := .run/sig.ov_SC03_089.jsonl @@ -1143,7 +1143,7 @@ ov_SC03_090_ELF := $(ov_SC03_090_OUT).elf ov_SC03_090_MAPFILE := $(ov_SC03_090_OUT).map ov_SC03_090_LD_SCRIPT := $(ov_SC03_090_OUT).ld ov_SC03_090_SPLAT_YAML := config/splat.ov_SC03_090.yaml -ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090.o,tail2.data.o,ov_SC03_090_jr_8015AE2C.o,tail3.data.o,ov_SC03_090_jr_801734BC.o,tail4.data.o,ov_SC03_090_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_090_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_090.o,tail2.data.o,ov_SC03_090_after.o,tail3.data.o,ov_SC03_090_jr_8015AE2C.o,tail4.data.o,ov_SC03_090_jr_801734BC.o,tail5.data.o,ov_SC03_090_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_090_CHECK_SHA := config/check.ov_SC03_090.sha ov_SC03_090_SYMBOLS := config/symbols.ov_SC03_090.txt ov_SC03_090_SIG := .run/sig.ov_SC03_090.jsonl @@ -1165,7 +1165,7 @@ ov_SC03_091_ELF := $(ov_SC03_091_OUT).elf ov_SC03_091_MAPFILE := $(ov_SC03_091_OUT).map ov_SC03_091_LD_SCRIPT := $(ov_SC03_091_OUT).ld ov_SC03_091_SPLAT_YAML := config/splat.ov_SC03_091.yaml -ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091.o,tail2.data.o,ov_SC03_091_jr_8015AE2C.o,tail3.data.o,ov_SC03_091_jr_801734BC.o,tail4.data.o,ov_SC03_091_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_091_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_091.o,tail2.data.o,ov_SC03_091_after.o,tail3.data.o,ov_SC03_091_jr_8015AE2C.o,tail4.data.o,ov_SC03_091_jr_801734BC.o,tail5.data.o,ov_SC03_091_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_091_CHECK_SHA := config/check.ov_SC03_091.sha ov_SC03_091_SYMBOLS := config/symbols.ov_SC03_091.txt ov_SC03_091_SIG := .run/sig.ov_SC03_091.jsonl @@ -1187,7 +1187,7 @@ ov_SC03_092_ELF := $(ov_SC03_092_OUT).elf ov_SC03_092_MAPFILE := $(ov_SC03_092_OUT).map ov_SC03_092_LD_SCRIPT := $(ov_SC03_092_OUT).ld ov_SC03_092_SPLAT_YAML := config/splat.ov_SC03_092.yaml -ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092.o,tail2.data.o,ov_SC03_092_jr_8015AE2C.o,tail3.data.o,ov_SC03_092_jr_801734BC.o,tail4.data.o,ov_SC03_092_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_092_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_092.o,tail2.data.o,ov_SC03_092_after.o,tail3.data.o,ov_SC03_092_jr_8015AE2C.o,tail4.data.o,ov_SC03_092_jr_801734BC.o,tail5.data.o,ov_SC03_092_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_092_CHECK_SHA := config/check.ov_SC03_092.sha ov_SC03_092_SYMBOLS := config/symbols.ov_SC03_092.txt ov_SC03_092_SIG := .run/sig.ov_SC03_092.jsonl @@ -1209,7 +1209,7 @@ ov_SC03_093_ELF := $(ov_SC03_093_OUT).elf ov_SC03_093_MAPFILE := $(ov_SC03_093_OUT).map ov_SC03_093_LD_SCRIPT := $(ov_SC03_093_OUT).ld ov_SC03_093_SPLAT_YAML := config/splat.ov_SC03_093.yaml -ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093.o,tail2.data.o,ov_SC03_093_jr_8015AE2C.o,tail3.data.o,ov_SC03_093_jr_801734BC.o,tail4.data.o,ov_SC03_093_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_093_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_093.o,tail2.data.o,ov_SC03_093_after.o,tail3.data.o,ov_SC03_093_jr_8015AE2C.o,tail4.data.o,ov_SC03_093_jr_801734BC.o,tail5.data.o,ov_SC03_093_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_093_CHECK_SHA := config/check.ov_SC03_093.sha ov_SC03_093_SYMBOLS := config/symbols.ov_SC03_093.txt ov_SC03_093_SIG := .run/sig.ov_SC03_093.jsonl @@ -1231,7 +1231,7 @@ ov_SC03_094_ELF := $(ov_SC03_094_OUT).elf ov_SC03_094_MAPFILE := $(ov_SC03_094_OUT).map ov_SC03_094_LD_SCRIPT := $(ov_SC03_094_OUT).ld ov_SC03_094_SPLAT_YAML := config/splat.ov_SC03_094.yaml -ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,tail2.data.o,ov_SC03_094_jr_8015AE2C.o,tail3.data.o,ov_SC03_094_jr_801734BC.o,tail4.data.o,ov_SC03_094_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_094_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_094.o,tail2.data.o,ov_SC03_094_after.o,tail3.data.o,ov_SC03_094_jr_8015AE2C.o,tail4.data.o,ov_SC03_094_jr_801734BC.o,tail5.data.o,ov_SC03_094_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_094_CHECK_SHA := config/check.ov_SC03_094.sha ov_SC03_094_SYMBOLS := config/symbols.ov_SC03_094.txt ov_SC03_094_SIG := .run/sig.ov_SC03_094.jsonl @@ -1253,7 +1253,7 @@ ov_SC03_095_ELF := $(ov_SC03_095_OUT).elf ov_SC03_095_MAPFILE := $(ov_SC03_095_OUT).map ov_SC03_095_LD_SCRIPT := $(ov_SC03_095_OUT).ld ov_SC03_095_SPLAT_YAML := config/splat.ov_SC03_095.yaml -ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095.o,tail2.data.o,ov_SC03_095_jr_8015AE2C.o,tail3.data.o,ov_SC03_095_jr_801734BC.o,tail4.data.o,ov_SC03_095_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_095_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_095.o,tail2.data.o,ov_SC03_095_after.o,tail3.data.o,ov_SC03_095_jr_8015AE2C.o,tail4.data.o,ov_SC03_095_jr_801734BC.o,tail5.data.o,ov_SC03_095_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_095_CHECK_SHA := config/check.ov_SC03_095.sha ov_SC03_095_SYMBOLS := config/symbols.ov_SC03_095.txt ov_SC03_095_SIG := .run/sig.ov_SC03_095.jsonl @@ -1275,7 +1275,7 @@ ov_SC03_096_ELF := $(ov_SC03_096_OUT).elf ov_SC03_096_MAPFILE := $(ov_SC03_096_OUT).map ov_SC03_096_LD_SCRIPT := $(ov_SC03_096_OUT).ld ov_SC03_096_SPLAT_YAML := config/splat.ov_SC03_096.yaml -ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096.o,tail2.data.o,ov_SC03_096_jr_8015AE2C.o,tail3.data.o,ov_SC03_096_jr_801734BC.o,tail4.data.o,ov_SC03_096_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_096_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_096.o,tail2.data.o,ov_SC03_096_after.o,tail3.data.o,ov_SC03_096_jr_8015AE2C.o,tail4.data.o,ov_SC03_096_jr_801734BC.o,tail5.data.o,ov_SC03_096_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_096_CHECK_SHA := config/check.ov_SC03_096.sha ov_SC03_096_SYMBOLS := config/symbols.ov_SC03_096.txt ov_SC03_096_SIG := .run/sig.ov_SC03_096.jsonl @@ -1297,7 +1297,7 @@ ov_SC03_097_ELF := $(ov_SC03_097_OUT).elf ov_SC03_097_MAPFILE := $(ov_SC03_097_OUT).map ov_SC03_097_LD_SCRIPT := $(ov_SC03_097_OUT).ld ov_SC03_097_SPLAT_YAML := config/splat.ov_SC03_097.yaml -ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097.o,tail2.data.o,ov_SC03_097_jr_8015AE2C.o,tail3.data.o,ov_SC03_097_jr_801734BC.o,tail4.data.o,ov_SC03_097_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_097_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_097.o,tail2.data.o,ov_SC03_097_after.o,tail3.data.o,ov_SC03_097_jr_8015AE2C.o,tail4.data.o,ov_SC03_097_jr_801734BC.o,tail5.data.o,ov_SC03_097_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_097_CHECK_SHA := config/check.ov_SC03_097.sha ov_SC03_097_SYMBOLS := config/symbols.ov_SC03_097.txt ov_SC03_097_SIG := .run/sig.ov_SC03_097.jsonl @@ -1319,7 +1319,7 @@ ov_SC03_098_ELF := $(ov_SC03_098_OUT).elf ov_SC03_098_MAPFILE := $(ov_SC03_098_OUT).map ov_SC03_098_LD_SCRIPT := $(ov_SC03_098_OUT).ld ov_SC03_098_SPLAT_YAML := config/splat.ov_SC03_098.yaml -ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098.o,tail2.data.o,ov_SC03_098_jr_8015AE2C.o,tail3.data.o,ov_SC03_098_jr_801734BC.o,tail4.data.o,ov_SC03_098_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_098_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_098.o,tail2.data.o,ov_SC03_098_after.o,tail3.data.o,ov_SC03_098_jr_8015AE2C.o,tail4.data.o,ov_SC03_098_jr_801734BC.o,tail5.data.o,ov_SC03_098_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_098_CHECK_SHA := config/check.ov_SC03_098.sha ov_SC03_098_SYMBOLS := config/symbols.ov_SC03_098.txt ov_SC03_098_SIG := .run/sig.ov_SC03_098.jsonl @@ -1341,7 +1341,7 @@ ov_SC03_099_ELF := $(ov_SC03_099_OUT).elf ov_SC03_099_MAPFILE := $(ov_SC03_099_OUT).map ov_SC03_099_LD_SCRIPT := $(ov_SC03_099_OUT).ld ov_SC03_099_SPLAT_YAML := config/splat.ov_SC03_099.yaml -ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099.o,tail2.data.o,ov_SC03_099_jr_8015AE2C.o,tail3.data.o,ov_SC03_099_jr_801734BC.o,tail4.data.o,ov_SC03_099_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_099_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_099.o,tail2.data.o,ov_SC03_099_after.o,tail3.data.o,ov_SC03_099_jr_8015AE2C.o,tail4.data.o,ov_SC03_099_jr_801734BC.o,tail5.data.o,ov_SC03_099_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_099_CHECK_SHA := config/check.ov_SC03_099.sha ov_SC03_099_SYMBOLS := config/symbols.ov_SC03_099.txt ov_SC03_099_SIG := .run/sig.ov_SC03_099.jsonl @@ -1363,7 +1363,7 @@ ov_SC03_100_ELF := $(ov_SC03_100_OUT).elf ov_SC03_100_MAPFILE := $(ov_SC03_100_OUT).map ov_SC03_100_LD_SCRIPT := $(ov_SC03_100_OUT).ld ov_SC03_100_SPLAT_YAML := config/splat.ov_SC03_100.yaml -ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100.o,tail2.data.o,ov_SC03_100_jr_8015AE2C.o,tail3.data.o,ov_SC03_100_jr_801734BC.o,tail4.data.o,ov_SC03_100_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_100_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_100.o,tail2.data.o,ov_SC03_100_after.o,tail3.data.o,ov_SC03_100_jr_8015AE2C.o,tail4.data.o,ov_SC03_100_jr_801734BC.o,tail5.data.o,ov_SC03_100_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_100_CHECK_SHA := config/check.ov_SC03_100.sha ov_SC03_100_SYMBOLS := config/symbols.ov_SC03_100.txt ov_SC03_100_SIG := .run/sig.ov_SC03_100.jsonl @@ -1385,7 +1385,7 @@ ov_SC03_101_ELF := $(ov_SC03_101_OUT).elf ov_SC03_101_MAPFILE := $(ov_SC03_101_OUT).map ov_SC03_101_LD_SCRIPT := $(ov_SC03_101_OUT).ld ov_SC03_101_SPLAT_YAML := config/splat.ov_SC03_101.yaml -ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101.o,tail2.data.o,ov_SC03_101_jr_8015AE2C.o,tail3.data.o,ov_SC03_101_jr_801734BC.o,tail4.data.o,ov_SC03_101_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_101_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_101.o,tail2.data.o,ov_SC03_101_after.o,tail3.data.o,ov_SC03_101_jr_8015AE2C.o,tail4.data.o,ov_SC03_101_jr_801734BC.o,tail5.data.o,ov_SC03_101_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_101_CHECK_SHA := config/check.ov_SC03_101.sha ov_SC03_101_SYMBOLS := config/symbols.ov_SC03_101.txt ov_SC03_101_SIG := .run/sig.ov_SC03_101.jsonl @@ -1407,7 +1407,7 @@ ov_SC03_102_ELF := $(ov_SC03_102_OUT).elf ov_SC03_102_MAPFILE := $(ov_SC03_102_OUT).map ov_SC03_102_LD_SCRIPT := $(ov_SC03_102_OUT).ld ov_SC03_102_SPLAT_YAML := config/splat.ov_SC03_102.yaml -ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102.o,tail2.data.o,ov_SC03_102_jr_8015AE2C.o,tail3.data.o,ov_SC03_102_jr_801734BC.o,tail4.data.o,ov_SC03_102_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_102_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_102.o,tail2.data.o,ov_SC03_102_after.o,tail3.data.o,ov_SC03_102_jr_8015AE2C.o,tail4.data.o,ov_SC03_102_jr_801734BC.o,tail5.data.o,ov_SC03_102_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_102_CHECK_SHA := config/check.ov_SC03_102.sha ov_SC03_102_SYMBOLS := config/symbols.ov_SC03_102.txt ov_SC03_102_SIG := .run/sig.ov_SC03_102.jsonl @@ -1429,7 +1429,7 @@ ov_SC03_103_ELF := $(ov_SC03_103_OUT).elf ov_SC03_103_MAPFILE := $(ov_SC03_103_OUT).map ov_SC03_103_LD_SCRIPT := $(ov_SC03_103_OUT).ld ov_SC03_103_SPLAT_YAML := config/splat.ov_SC03_103.yaml -ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103.o,tail2.data.o,ov_SC03_103_jr_8015AE2C.o,tail3.data.o,ov_SC03_103_jr_801734BC.o,tail4.data.o,ov_SC03_103_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103.o,tail2.data.o,ov_SC03_103_after.o,tail3.data.o,ov_SC03_103_jr_8015AE2C.o,tail4.data.o,ov_SC03_103_jr_801734BC.o,tail5.data.o,ov_SC03_103_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_103_CHECK_SHA := config/check.ov_SC03_103.sha ov_SC03_103_SYMBOLS := config/symbols.ov_SC03_103.txt ov_SC03_103_SIG := .run/sig.ov_SC03_103.jsonl @@ -1451,7 +1451,7 @@ ov_SC03_104_ELF := $(ov_SC03_104_OUT).elf ov_SC03_104_MAPFILE := $(ov_SC03_104_OUT).map ov_SC03_104_LD_SCRIPT := $(ov_SC03_104_OUT).ld ov_SC03_104_SPLAT_YAML := config/splat.ov_SC03_104.yaml -ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104.o,tail2.data.o,ov_SC03_104_jr_8015AE2C.o,tail3.data.o,ov_SC03_104_jr_801734BC.o,tail4.data.o,ov_SC03_104_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_104_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_104.o,tail2.data.o,ov_SC03_104_after.o,tail3.data.o,ov_SC03_104_jr_8015AE2C.o,tail4.data.o,ov_SC03_104_jr_801734BC.o,tail5.data.o,ov_SC03_104_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_104_CHECK_SHA := config/check.ov_SC03_104.sha ov_SC03_104_SYMBOLS := config/symbols.ov_SC03_104.txt ov_SC03_104_SIG := .run/sig.ov_SC03_104.jsonl @@ -1473,7 +1473,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,tail2.data.o,ov_SC03_105_jr_8015AE2C.o,tail3.data.o,ov_SC03_105_jr_801734BC.o,tail4.data.o,ov_SC03_105_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_105_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_105.o,tail2.data.o,ov_SC03_105_after.o,tail3.data.o,ov_SC03_105_jr_8015AE2C.o,tail4.data.o,ov_SC03_105_jr_801734BC.o,tail5.data.o,ov_SC03_105_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_105_CHECK_SHA := config/check.ov_SC03_105.sha ov_SC03_105_SYMBOLS := config/symbols.ov_SC03_105.txt ov_SC03_105_SIG := .run/sig.ov_SC03_105.jsonl @@ -1495,7 +1495,7 @@ ov_SC03_108_ELF := $(ov_SC03_108_OUT).elf ov_SC03_108_MAPFILE := $(ov_SC03_108_OUT).map ov_SC03_108_LD_SCRIPT := $(ov_SC03_108_OUT).ld ov_SC03_108_SPLAT_YAML := config/splat.ov_SC03_108.yaml -ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108.o,tail2.data.o,ov_SC03_108_jr_8015AE2C.o,tail3.data.o,ov_SC03_108_jr_801734BC.o,tail4.data.o,ov_SC03_108_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_108_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_108.o,tail2.data.o,ov_SC03_108_after.o,tail3.data.o,ov_SC03_108_jr_8015AE2C.o,tail4.data.o,ov_SC03_108_jr_801734BC.o,tail5.data.o,ov_SC03_108_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_108_CHECK_SHA := config/check.ov_SC03_108.sha ov_SC03_108_SYMBOLS := config/symbols.ov_SC03_108.txt ov_SC03_108_SIG := .run/sig.ov_SC03_108.jsonl @@ -1517,7 +1517,7 @@ ov_SC03_109_ELF := $(ov_SC03_109_OUT).elf ov_SC03_109_MAPFILE := $(ov_SC03_109_OUT).map ov_SC03_109_LD_SCRIPT := $(ov_SC03_109_OUT).ld ov_SC03_109_SPLAT_YAML := config/splat.ov_SC03_109.yaml -ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109.o,tail2.data.o,ov_SC03_109_jr_8015AE2C.o,tail3.data.o,ov_SC03_109_jr_801734BC.o,tail4.data.o,ov_SC03_109_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_109_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_109.o,tail2.data.o,ov_SC03_109_after.o,tail3.data.o,ov_SC03_109_jr_8015AE2C.o,tail4.data.o,ov_SC03_109_jr_801734BC.o,tail5.data.o,ov_SC03_109_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_109_CHECK_SHA := config/check.ov_SC03_109.sha ov_SC03_109_SYMBOLS := config/symbols.ov_SC03_109.txt ov_SC03_109_SIG := .run/sig.ov_SC03_109.jsonl @@ -1539,7 +1539,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,tail2.data.o,ov_SC03_110_jr_8015AE2C.o,tail3.data.o,ov_SC03_110_jr_801734BC.o,tail4.data.o,ov_SC03_110_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_110_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_110.o,tail2.data.o,ov_SC03_110_after.o,tail3.data.o,ov_SC03_110_jr_8015AE2C.o,tail4.data.o,ov_SC03_110_jr_801734BC.o,tail5.data.o,ov_SC03_110_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_110_CHECK_SHA := config/check.ov_SC03_110.sha ov_SC03_110_SYMBOLS := config/symbols.ov_SC03_110.txt ov_SC03_110_SIG := .run/sig.ov_SC03_110.jsonl @@ -1561,7 +1561,7 @@ ov_SC03_111_ELF := $(ov_SC03_111_OUT).elf ov_SC03_111_MAPFILE := $(ov_SC03_111_OUT).map ov_SC03_111_LD_SCRIPT := $(ov_SC03_111_OUT).ld ov_SC03_111_SPLAT_YAML := config/splat.ov_SC03_111.yaml -ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111.o,tail2.data.o,ov_SC03_111_jr_8015AE2C.o,tail3.data.o,ov_SC03_111_jr_801734BC.o,tail4.data.o,ov_SC03_111_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_111_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_111.o,tail2.data.o,ov_SC03_111_after.o,tail3.data.o,ov_SC03_111_jr_8015AE2C.o,tail4.data.o,ov_SC03_111_jr_801734BC.o,tail5.data.o,ov_SC03_111_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_111_CHECK_SHA := config/check.ov_SC03_111.sha ov_SC03_111_SYMBOLS := config/symbols.ov_SC03_111.txt ov_SC03_111_SIG := .run/sig.ov_SC03_111.jsonl @@ -1583,7 +1583,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,tail2.data.o,ov_SC03_112_jr_8015AE2C.o,tail3.data.o,ov_SC03_112_jr_801734BC.o,tail4.data.o,ov_SC03_112_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_112_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_112.o,tail2.data.o,ov_SC03_112_after.o,tail3.data.o,ov_SC03_112_jr_8015AE2C.o,tail4.data.o,ov_SC03_112_jr_801734BC.o,tail5.data.o,ov_SC03_112_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_112_CHECK_SHA := config/check.ov_SC03_112.sha ov_SC03_112_SYMBOLS := config/symbols.ov_SC03_112.txt ov_SC03_112_SIG := .run/sig.ov_SC03_112.jsonl @@ -1605,7 +1605,7 @@ ov_SC03_113_ELF := $(ov_SC03_113_OUT).elf ov_SC03_113_MAPFILE := $(ov_SC03_113_OUT).map ov_SC03_113_LD_SCRIPT := $(ov_SC03_113_OUT).ld ov_SC03_113_SPLAT_YAML := config/splat.ov_SC03_113.yaml -ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113.o,tail2.data.o,ov_SC03_113_jr_8015AE2C.o,tail3.data.o,ov_SC03_113_jr_801734BC.o,tail4.data.o,ov_SC03_113_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_113_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_113.o,tail2.data.o,ov_SC03_113_after.o,tail3.data.o,ov_SC03_113_jr_8015AE2C.o,tail4.data.o,ov_SC03_113_jr_801734BC.o,tail5.data.o,ov_SC03_113_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_113_CHECK_SHA := config/check.ov_SC03_113.sha ov_SC03_113_SYMBOLS := config/symbols.ov_SC03_113.txt ov_SC03_113_SIG := .run/sig.ov_SC03_113.jsonl @@ -1627,7 +1627,7 @@ ov_SC03_114_ELF := $(ov_SC03_114_OUT).elf ov_SC03_114_MAPFILE := $(ov_SC03_114_OUT).map ov_SC03_114_LD_SCRIPT := $(ov_SC03_114_OUT).ld ov_SC03_114_SPLAT_YAML := config/splat.ov_SC03_114.yaml -ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114.o,tail2.data.o,ov_SC03_114_jr_8015AE2C.o,tail3.data.o,ov_SC03_114_jr_801734BC.o,tail4.data.o,ov_SC03_114_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_114_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_114.o,tail2.data.o,ov_SC03_114_after.o,tail3.data.o,ov_SC03_114_jr_8015AE2C.o,tail4.data.o,ov_SC03_114_jr_801734BC.o,tail5.data.o,ov_SC03_114_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_114_CHECK_SHA := config/check.ov_SC03_114.sha ov_SC03_114_SYMBOLS := config/symbols.ov_SC03_114.txt ov_SC03_114_SIG := .run/sig.ov_SC03_114.jsonl @@ -1649,7 +1649,7 @@ ov_SC03_115_ELF := $(ov_SC03_115_OUT).elf ov_SC03_115_MAPFILE := $(ov_SC03_115_OUT).map ov_SC03_115_LD_SCRIPT := $(ov_SC03_115_OUT).ld ov_SC03_115_SPLAT_YAML := config/splat.ov_SC03_115.yaml -ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115.o,tail2.data.o,ov_SC03_115_jr_8015AE2C.o,tail3.data.o,ov_SC03_115_jr_801734BC.o,tail4.data.o,ov_SC03_115_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_115_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_115.o,tail2.data.o,ov_SC03_115_after.o,tail3.data.o,ov_SC03_115_jr_8015AE2C.o,tail4.data.o,ov_SC03_115_jr_801734BC.o,tail5.data.o,ov_SC03_115_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_115_CHECK_SHA := config/check.ov_SC03_115.sha ov_SC03_115_SYMBOLS := config/symbols.ov_SC03_115.txt ov_SC03_115_SIG := .run/sig.ov_SC03_115.jsonl @@ -1671,7 +1671,7 @@ ov_SC03_116_ELF := $(ov_SC03_116_OUT).elf ov_SC03_116_MAPFILE := $(ov_SC03_116_OUT).map ov_SC03_116_LD_SCRIPT := $(ov_SC03_116_OUT).ld ov_SC03_116_SPLAT_YAML := config/splat.ov_SC03_116.yaml -ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116.o,tail2.data.o,ov_SC03_116_jr_8015AE2C.o,tail3.data.o,ov_SC03_116_jr_801734BC.o,tail4.data.o,ov_SC03_116_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_116_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_116.o,tail2.data.o,ov_SC03_116_after.o,tail3.data.o,ov_SC03_116_jr_8015AE2C.o,tail4.data.o,ov_SC03_116_jr_801734BC.o,tail5.data.o,ov_SC03_116_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_116_CHECK_SHA := config/check.ov_SC03_116.sha ov_SC03_116_SYMBOLS := config/symbols.ov_SC03_116.txt ov_SC03_116_SIG := .run/sig.ov_SC03_116.jsonl @@ -1693,7 +1693,7 @@ ov_SC03_117_ELF := $(ov_SC03_117_OUT).elf ov_SC03_117_MAPFILE := $(ov_SC03_117_OUT).map ov_SC03_117_LD_SCRIPT := $(ov_SC03_117_OUT).ld ov_SC03_117_SPLAT_YAML := config/splat.ov_SC03_117.yaml -ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117.o,tail2.data.o,ov_SC03_117_jr_8015AE2C.o,tail3.data.o,ov_SC03_117_jr_801734BC.o,tail4.data.o,ov_SC03_117_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117.o,tail2.data.o,ov_SC03_117_after.o,tail3.data.o,ov_SC03_117_jr_8015AE2C.o,tail4.data.o,ov_SC03_117_jr_801734BC.o,tail5.data.o,ov_SC03_117_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_117_CHECK_SHA := config/check.ov_SC03_117.sha ov_SC03_117_SYMBOLS := config/symbols.ov_SC03_117.txt ov_SC03_117_SIG := .run/sig.ov_SC03_117.jsonl @@ -1715,7 +1715,7 @@ ov_SC03_118_ELF := $(ov_SC03_118_OUT).elf ov_SC03_118_MAPFILE := $(ov_SC03_118_OUT).map ov_SC03_118_LD_SCRIPT := $(ov_SC03_118_OUT).ld ov_SC03_118_SPLAT_YAML := config/splat.ov_SC03_118.yaml -ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118.o,tail2.data.o,ov_SC03_118_jr_8015AE2C.o,tail3.data.o,ov_SC03_118_jr_801734BC.o,tail4.data.o,ov_SC03_118_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_118_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_118.o,tail2.data.o,ov_SC03_118_after.o,tail3.data.o,ov_SC03_118_jr_8015AE2C.o,tail4.data.o,ov_SC03_118_jr_801734BC.o,tail5.data.o,ov_SC03_118_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_118_CHECK_SHA := config/check.ov_SC03_118.sha ov_SC03_118_SYMBOLS := config/symbols.ov_SC03_118.txt ov_SC03_118_SIG := .run/sig.ov_SC03_118.jsonl @@ -1737,7 +1737,7 @@ ov_SC03_119_ELF := $(ov_SC03_119_OUT).elf ov_SC03_119_MAPFILE := $(ov_SC03_119_OUT).map ov_SC03_119_LD_SCRIPT := $(ov_SC03_119_OUT).ld ov_SC03_119_SPLAT_YAML := config/splat.ov_SC03_119.yaml -ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119.o,tail2.data.o,ov_SC03_119_jr_8015AE2C.o,tail3.data.o,ov_SC03_119_jr_801734BC.o,tail4.data.o,ov_SC03_119_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_119_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_119.o,tail2.data.o,ov_SC03_119_after.o,tail3.data.o,ov_SC03_119_jr_8015AE2C.o,tail4.data.o,ov_SC03_119_jr_801734BC.o,tail5.data.o,ov_SC03_119_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_119_CHECK_SHA := config/check.ov_SC03_119.sha ov_SC03_119_SYMBOLS := config/symbols.ov_SC03_119.txt ov_SC03_119_SIG := .run/sig.ov_SC03_119.jsonl @@ -1759,7 +1759,7 @@ ov_SC03_121_ELF := $(ov_SC03_121_OUT).elf ov_SC03_121_MAPFILE := $(ov_SC03_121_OUT).map ov_SC03_121_LD_SCRIPT := $(ov_SC03_121_OUT).ld ov_SC03_121_SPLAT_YAML := config/splat.ov_SC03_121.yaml -ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,tail2.data.o,ov_SC03_121_jr_8015AE2C.o,tail3.data.o,ov_SC03_121_jr_801734BC.o,tail4.data.o,ov_SC03_121_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,tail2.data.o,ov_SC03_121_after.o,tail3.data.o,ov_SC03_121_jr_8015AE2C.o,tail4.data.o,ov_SC03_121_jr_801734BC.o,tail5.data.o,ov_SC03_121_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_121_CHECK_SHA := config/check.ov_SC03_121.sha ov_SC03_121_SYMBOLS := config/symbols.ov_SC03_121.txt ov_SC03_121_SIG := .run/sig.ov_SC03_121.jsonl @@ -1781,7 +1781,7 @@ ov_SC03_124_ELF := $(ov_SC03_124_OUT).elf ov_SC03_124_MAPFILE := $(ov_SC03_124_OUT).map ov_SC03_124_LD_SCRIPT := $(ov_SC03_124_OUT).ld ov_SC03_124_SPLAT_YAML := config/splat.ov_SC03_124.yaml -ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,tail2.data.o,ov_SC03_124_jr_8015AE2C.o,tail3.data.o,ov_SC03_124_jr_801734BC.o,tail4.data.o,ov_SC03_124_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_124_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_124.o,tail2.data.o,ov_SC03_124_after.o,tail3.data.o,ov_SC03_124_jr_8015AE2C.o,tail4.data.o,ov_SC03_124_jr_801734BC.o,tail5.data.o,ov_SC03_124_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_124_CHECK_SHA := config/check.ov_SC03_124.sha ov_SC03_124_SYMBOLS := config/symbols.ov_SC03_124.txt ov_SC03_124_SIG := .run/sig.ov_SC03_124.jsonl @@ -1803,7 +1803,7 @@ ov_SC03_125_ELF := $(ov_SC03_125_OUT).elf ov_SC03_125_MAPFILE := $(ov_SC03_125_OUT).map ov_SC03_125_LD_SCRIPT := $(ov_SC03_125_OUT).ld ov_SC03_125_SPLAT_YAML := config/splat.ov_SC03_125.yaml -ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125.o,tail2.data.o,ov_SC03_125_jr_8015AE2C.o,tail3.data.o,ov_SC03_125_jr_801734BC.o,tail4.data.o,ov_SC03_125_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_125_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_125.o,tail2.data.o,ov_SC03_125_after.o,tail3.data.o,ov_SC03_125_jr_8015AE2C.o,tail4.data.o,ov_SC03_125_jr_801734BC.o,tail5.data.o,ov_SC03_125_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_125_CHECK_SHA := config/check.ov_SC03_125.sha ov_SC03_125_SYMBOLS := config/symbols.ov_SC03_125.txt ov_SC03_125_SIG := .run/sig.ov_SC03_125.jsonl @@ -1825,7 +1825,7 @@ ov_SC03_126_ELF := $(ov_SC03_126_OUT).elf ov_SC03_126_MAPFILE := $(ov_SC03_126_OUT).map ov_SC03_126_LD_SCRIPT := $(ov_SC03_126_OUT).ld ov_SC03_126_SPLAT_YAML := config/splat.ov_SC03_126.yaml -ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126.o,tail2.data.o,ov_SC03_126_jr_8015AE2C.o,tail3.data.o,ov_SC03_126_jr_801734BC.o,tail4.data.o,ov_SC03_126_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_126_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_126.o,tail2.data.o,ov_SC03_126_after.o,tail3.data.o,ov_SC03_126_jr_8015AE2C.o,tail4.data.o,ov_SC03_126_jr_801734BC.o,tail5.data.o,ov_SC03_126_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_126_CHECK_SHA := config/check.ov_SC03_126.sha ov_SC03_126_SYMBOLS := config/symbols.ov_SC03_126.txt ov_SC03_126_SIG := .run/sig.ov_SC03_126.jsonl @@ -1847,7 +1847,7 @@ ov_SC04_002_ELF := $(ov_SC04_002_OUT).elf ov_SC04_002_MAPFILE := $(ov_SC04_002_OUT).map ov_SC04_002_LD_SCRIPT := $(ov_SC04_002_OUT).ld ov_SC04_002_SPLAT_YAML := config/splat.ov_SC04_002.yaml -ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002.o,tail2.data.o,ov_SC04_002_jr_8015AE2C.o,tail3.data.o,ov_SC04_002_jr_801734BC.o,tail4.data.o,ov_SC04_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_002.o,tail2.data.o,ov_SC04_002_after.o,tail3.data.o,ov_SC04_002_jr_8015AE2C.o,tail4.data.o,ov_SC04_002_jr_801734BC.o,tail5.data.o,ov_SC04_002_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_002_CHECK_SHA := config/check.ov_SC04_002.sha ov_SC04_002_SYMBOLS := config/symbols.ov_SC04_002.txt ov_SC04_002_SIG := .run/sig.ov_SC04_002.jsonl @@ -1869,7 +1869,7 @@ ov_SC04_003_ELF := $(ov_SC04_003_OUT).elf ov_SC04_003_MAPFILE := $(ov_SC04_003_OUT).map ov_SC04_003_LD_SCRIPT := $(ov_SC04_003_OUT).ld ov_SC04_003_SPLAT_YAML := config/splat.ov_SC04_003.yaml -ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003.o,tail2.data.o,ov_SC04_003_jr_8015AE2C.o,tail3.data.o,ov_SC04_003_jr_801734BC.o,tail4.data.o,ov_SC04_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_003.o,tail2.data.o,ov_SC04_003_after.o,tail3.data.o,ov_SC04_003_jr_8015AE2C.o,tail4.data.o,ov_SC04_003_jr_801734BC.o,tail5.data.o,ov_SC04_003_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_003_CHECK_SHA := config/check.ov_SC04_003.sha ov_SC04_003_SYMBOLS := config/symbols.ov_SC04_003.txt ov_SC04_003_SIG := .run/sig.ov_SC04_003.jsonl @@ -1891,7 +1891,7 @@ ov_SC04_004_ELF := $(ov_SC04_004_OUT).elf ov_SC04_004_MAPFILE := $(ov_SC04_004_OUT).map ov_SC04_004_LD_SCRIPT := $(ov_SC04_004_OUT).ld ov_SC04_004_SPLAT_YAML := config/splat.ov_SC04_004.yaml -ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004.o,tail2.data.o,ov_SC04_004_jr_8015AE2C.o,tail3.data.o,ov_SC04_004_jr_801734BC.o,tail4.data.o,ov_SC04_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_004.o,tail2.data.o,ov_SC04_004_after.o,tail3.data.o,ov_SC04_004_jr_8015AE2C.o,tail4.data.o,ov_SC04_004_jr_801734BC.o,tail5.data.o,ov_SC04_004_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_004_CHECK_SHA := config/check.ov_SC04_004.sha ov_SC04_004_SYMBOLS := config/symbols.ov_SC04_004.txt ov_SC04_004_SIG := .run/sig.ov_SC04_004.jsonl @@ -1913,7 +1913,7 @@ ov_SC04_005_ELF := $(ov_SC04_005_OUT).elf ov_SC04_005_MAPFILE := $(ov_SC04_005_OUT).map ov_SC04_005_LD_SCRIPT := $(ov_SC04_005_OUT).ld ov_SC04_005_SPLAT_YAML := config/splat.ov_SC04_005.yaml -ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005.o,tail2.data.o,ov_SC04_005_jr_8015AE2C.o,tail3.data.o,ov_SC04_005_jr_801734BC.o,tail4.data.o,ov_SC04_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_005.o,tail2.data.o,ov_SC04_005_after.o,tail3.data.o,ov_SC04_005_jr_8015AE2C.o,tail4.data.o,ov_SC04_005_jr_801734BC.o,tail5.data.o,ov_SC04_005_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_005_CHECK_SHA := config/check.ov_SC04_005.sha ov_SC04_005_SYMBOLS := config/symbols.ov_SC04_005.txt ov_SC04_005_SIG := .run/sig.ov_SC04_005.jsonl @@ -1935,7 +1935,7 @@ ov_SC04_006_ELF := $(ov_SC04_006_OUT).elf ov_SC04_006_MAPFILE := $(ov_SC04_006_OUT).map ov_SC04_006_LD_SCRIPT := $(ov_SC04_006_OUT).ld ov_SC04_006_SPLAT_YAML := config/splat.ov_SC04_006.yaml -ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006.o,tail2.data.o,ov_SC04_006_jr_8015AE2C.o,tail3.data.o,ov_SC04_006_jr_801734BC.o,tail4.data.o,ov_SC04_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_006.o,tail2.data.o,ov_SC04_006_after.o,tail3.data.o,ov_SC04_006_jr_8015AE2C.o,tail4.data.o,ov_SC04_006_jr_801734BC.o,tail5.data.o,ov_SC04_006_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_006_CHECK_SHA := config/check.ov_SC04_006.sha ov_SC04_006_SYMBOLS := config/symbols.ov_SC04_006.txt ov_SC04_006_SIG := .run/sig.ov_SC04_006.jsonl @@ -1957,7 +1957,7 @@ ov_SC04_007_ELF := $(ov_SC04_007_OUT).elf ov_SC04_007_MAPFILE := $(ov_SC04_007_OUT).map ov_SC04_007_LD_SCRIPT := $(ov_SC04_007_OUT).ld ov_SC04_007_SPLAT_YAML := config/splat.ov_SC04_007.yaml -ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007.o,tail2.data.o,ov_SC04_007_jr_8015AE2C.o,tail3.data.o,ov_SC04_007_jr_801734BC.o,tail4.data.o,ov_SC04_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_007.o,tail2.data.o,ov_SC04_007_after.o,tail3.data.o,ov_SC04_007_jr_8015AE2C.o,tail4.data.o,ov_SC04_007_jr_801734BC.o,tail5.data.o,ov_SC04_007_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_007_CHECK_SHA := config/check.ov_SC04_007.sha ov_SC04_007_SYMBOLS := config/symbols.ov_SC04_007.txt ov_SC04_007_SIG := .run/sig.ov_SC04_007.jsonl @@ -2001,7 +2001,7 @@ ov_SC04_009_ELF := $(ov_SC04_009_OUT).elf ov_SC04_009_MAPFILE := $(ov_SC04_009_OUT).map ov_SC04_009_LD_SCRIPT := $(ov_SC04_009_OUT).ld ov_SC04_009_SPLAT_YAML := config/splat.ov_SC04_009.yaml -ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009.o,tail2.data.o,ov_SC04_009_jr_8015AE2C.o,tail3.data.o,ov_SC04_009_jr_801734BC.o,tail4.data.o,ov_SC04_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_009.o,tail2.data.o,ov_SC04_009_after.o,tail3.data.o,ov_SC04_009_jr_8015AE2C.o,tail4.data.o,ov_SC04_009_jr_801734BC.o,tail5.data.o,ov_SC04_009_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_009_CHECK_SHA := config/check.ov_SC04_009.sha ov_SC04_009_SYMBOLS := config/symbols.ov_SC04_009.txt ov_SC04_009_SIG := .run/sig.ov_SC04_009.jsonl @@ -2023,7 +2023,7 @@ ov_SC04_010_ELF := $(ov_SC04_010_OUT).elf ov_SC04_010_MAPFILE := $(ov_SC04_010_OUT).map ov_SC04_010_LD_SCRIPT := $(ov_SC04_010_OUT).ld ov_SC04_010_SPLAT_YAML := config/splat.ov_SC04_010.yaml -ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010.o,tail2.data.o,ov_SC04_010_jr_8015AE2C.o,tail3.data.o,ov_SC04_010_jr_801734BC.o,tail4.data.o,ov_SC04_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_010.o,tail2.data.o,ov_SC04_010_after.o,tail3.data.o,ov_SC04_010_jr_8015AE2C.o,tail4.data.o,ov_SC04_010_jr_801734BC.o,tail5.data.o,ov_SC04_010_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_010_CHECK_SHA := config/check.ov_SC04_010.sha ov_SC04_010_SYMBOLS := config/symbols.ov_SC04_010.txt ov_SC04_010_SIG := .run/sig.ov_SC04_010.jsonl @@ -2045,7 +2045,7 @@ ov_SC04_011_ELF := $(ov_SC04_011_OUT).elf ov_SC04_011_MAPFILE := $(ov_SC04_011_OUT).map ov_SC04_011_LD_SCRIPT := $(ov_SC04_011_OUT).ld ov_SC04_011_SPLAT_YAML := config/splat.ov_SC04_011.yaml -ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011.o,tail2.data.o,ov_SC04_011_jr_8015AE2C.o,tail3.data.o,ov_SC04_011_jr_801734BC.o,tail4.data.o,ov_SC04_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_011.o,tail2.data.o,ov_SC04_011_after.o,tail3.data.o,ov_SC04_011_jr_8015AE2C.o,tail4.data.o,ov_SC04_011_jr_801734BC.o,tail5.data.o,ov_SC04_011_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_011_CHECK_SHA := config/check.ov_SC04_011.sha ov_SC04_011_SYMBOLS := config/symbols.ov_SC04_011.txt ov_SC04_011_SIG := .run/sig.ov_SC04_011.jsonl @@ -2067,7 +2067,7 @@ ov_SC04_012_ELF := $(ov_SC04_012_OUT).elf ov_SC04_012_MAPFILE := $(ov_SC04_012_OUT).map ov_SC04_012_LD_SCRIPT := $(ov_SC04_012_OUT).ld ov_SC04_012_SPLAT_YAML := config/splat.ov_SC04_012.yaml -ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012.o,tail2.data.o,ov_SC04_012_jr_8015AE2C.o,tail3.data.o,ov_SC04_012_jr_801734BC.o,tail4.data.o,ov_SC04_012_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_012_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_012.o,tail2.data.o,ov_SC04_012_after.o,tail3.data.o,ov_SC04_012_jr_8015AE2C.o,tail4.data.o,ov_SC04_012_jr_801734BC.o,tail5.data.o,ov_SC04_012_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_012_CHECK_SHA := config/check.ov_SC04_012.sha ov_SC04_012_SYMBOLS := config/symbols.ov_SC04_012.txt ov_SC04_012_SIG := .run/sig.ov_SC04_012.jsonl @@ -2089,7 +2089,7 @@ ov_SC04_015_ELF := $(ov_SC04_015_OUT).elf ov_SC04_015_MAPFILE := $(ov_SC04_015_OUT).map ov_SC04_015_LD_SCRIPT := $(ov_SC04_015_OUT).ld ov_SC04_015_SPLAT_YAML := config/splat.ov_SC04_015.yaml -ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015.o,tail2.data.o,ov_SC04_015_jr_8015AE2C.o,tail3.data.o,ov_SC04_015_jr_801734BC.o,tail4.data.o,ov_SC04_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_015.o,tail2.data.o,ov_SC04_015_after.o,tail3.data.o,ov_SC04_015_jr_8015AE2C.o,tail4.data.o,ov_SC04_015_jr_801734BC.o,tail5.data.o,ov_SC04_015_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_015_CHECK_SHA := config/check.ov_SC04_015.sha ov_SC04_015_SYMBOLS := config/symbols.ov_SC04_015.txt ov_SC04_015_SIG := .run/sig.ov_SC04_015.jsonl @@ -2111,7 +2111,7 @@ ov_SC04_016_ELF := $(ov_SC04_016_OUT).elf ov_SC04_016_MAPFILE := $(ov_SC04_016_OUT).map ov_SC04_016_LD_SCRIPT := $(ov_SC04_016_OUT).ld ov_SC04_016_SPLAT_YAML := config/splat.ov_SC04_016.yaml -ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016.o,tail2.data.o,ov_SC04_016_jr_8015AE2C.o,tail3.data.o,ov_SC04_016_jr_801734BC.o,tail4.data.o,ov_SC04_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_016.o,tail2.data.o,ov_SC04_016_after.o,tail3.data.o,ov_SC04_016_jr_8015AE2C.o,tail4.data.o,ov_SC04_016_jr_801734BC.o,tail5.data.o,ov_SC04_016_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_016_CHECK_SHA := config/check.ov_SC04_016.sha ov_SC04_016_SYMBOLS := config/symbols.ov_SC04_016.txt ov_SC04_016_SIG := .run/sig.ov_SC04_016.jsonl @@ -2133,7 +2133,7 @@ ov_SC04_020_ELF := $(ov_SC04_020_OUT).elf ov_SC04_020_MAPFILE := $(ov_SC04_020_OUT).map ov_SC04_020_LD_SCRIPT := $(ov_SC04_020_OUT).ld ov_SC04_020_SPLAT_YAML := config/splat.ov_SC04_020.yaml -ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020.o,tail2.data.o,ov_SC04_020_jr_8015AE2C.o,tail3.data.o,ov_SC04_020_jr_801734BC.o,tail4.data.o,ov_SC04_020_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_020.o,tail2.data.o,ov_SC04_020_after.o,tail3.data.o,ov_SC04_020_jr_8015AE2C.o,tail4.data.o,ov_SC04_020_jr_801734BC.o,tail5.data.o,ov_SC04_020_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_020_CHECK_SHA := config/check.ov_SC04_020.sha ov_SC04_020_SYMBOLS := config/symbols.ov_SC04_020.txt ov_SC04_020_SIG := .run/sig.ov_SC04_020.jsonl @@ -2155,7 +2155,7 @@ ov_SC04_021_ELF := $(ov_SC04_021_OUT).elf ov_SC04_021_MAPFILE := $(ov_SC04_021_OUT).map ov_SC04_021_LD_SCRIPT := $(ov_SC04_021_OUT).ld ov_SC04_021_SPLAT_YAML := config/splat.ov_SC04_021.yaml -ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021.o,tail2.data.o,ov_SC04_021_jr_8015AE2C.o,tail3.data.o,ov_SC04_021_jr_801734BC.o,tail4.data.o,ov_SC04_021_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC04_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC04_021.o,tail2.data.o,ov_SC04_021_after.o,tail3.data.o,ov_SC04_021_jr_8015AE2C.o,tail4.data.o,ov_SC04_021_jr_801734BC.o,tail5.data.o,ov_SC04_021_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_021_CHECK_SHA := config/check.ov_SC04_021.sha ov_SC04_021_SYMBOLS := config/symbols.ov_SC04_021.txt ov_SC04_021_SIG := .run/sig.ov_SC04_021.jsonl @@ -2177,7 +2177,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,tail2.data.o,ov_SC05_001_jr_8015AE2C.o,tail3.data.o,ov_SC05_001_jr_801734BC.o,tail4.data.o,ov_SC05_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_001.o,tail2.data.o,ov_SC05_001_after.o,tail3.data.o,ov_SC05_001_jr_8015AE2C.o,tail4.data.o,ov_SC05_001_jr_801734BC.o,tail5.data.o,ov_SC05_001_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_001_CHECK_SHA := config/check.ov_SC05_001.sha ov_SC05_001_SYMBOLS := config/symbols.ov_SC05_001.txt ov_SC05_001_SIG := .run/sig.ov_SC05_001.jsonl @@ -2199,7 +2199,7 @@ ov_SC05_002_ELF := $(ov_SC05_002_OUT).elf ov_SC05_002_MAPFILE := $(ov_SC05_002_OUT).map ov_SC05_002_LD_SCRIPT := $(ov_SC05_002_OUT).ld ov_SC05_002_SPLAT_YAML := config/splat.ov_SC05_002.yaml -ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002.o,tail2.data.o,ov_SC05_002_jr_8015AE2C.o,tail3.data.o,ov_SC05_002_jr_801734BC.o,tail4.data.o,ov_SC05_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_002.o,tail2.data.o,ov_SC05_002_after.o,tail3.data.o,ov_SC05_002_jr_8015AE2C.o,tail4.data.o,ov_SC05_002_jr_801734BC.o,tail5.data.o,ov_SC05_002_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_002_CHECK_SHA := config/check.ov_SC05_002.sha ov_SC05_002_SYMBOLS := config/symbols.ov_SC05_002.txt ov_SC05_002_SIG := .run/sig.ov_SC05_002.jsonl @@ -2221,7 +2221,7 @@ ov_SC05_003_ELF := $(ov_SC05_003_OUT).elf ov_SC05_003_MAPFILE := $(ov_SC05_003_OUT).map ov_SC05_003_LD_SCRIPT := $(ov_SC05_003_OUT).ld ov_SC05_003_SPLAT_YAML := config/splat.ov_SC05_003.yaml -ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003.o,tail2.data.o,ov_SC05_003_jr_8015AE2C.o,tail3.data.o,ov_SC05_003_jr_801734BC.o,tail4.data.o,ov_SC05_003_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_003_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_003.o,tail2.data.o,ov_SC05_003_after.o,tail3.data.o,ov_SC05_003_jr_8015AE2C.o,tail4.data.o,ov_SC05_003_jr_801734BC.o,tail5.data.o,ov_SC05_003_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_003_CHECK_SHA := config/check.ov_SC05_003.sha ov_SC05_003_SYMBOLS := config/symbols.ov_SC05_003.txt ov_SC05_003_SIG := .run/sig.ov_SC05_003.jsonl @@ -2243,7 +2243,7 @@ ov_SC05_004_ELF := $(ov_SC05_004_OUT).elf ov_SC05_004_MAPFILE := $(ov_SC05_004_OUT).map ov_SC05_004_LD_SCRIPT := $(ov_SC05_004_OUT).ld ov_SC05_004_SPLAT_YAML := config/splat.ov_SC05_004.yaml -ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004.o,tail2.data.o,ov_SC05_004_jr_8015AE2C.o,tail3.data.o,ov_SC05_004_jr_801734BC.o,tail4.data.o,ov_SC05_004_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004.o,tail2.data.o,ov_SC05_004_after.o,tail3.data.o,ov_SC05_004_jr_8015AE2C.o,tail4.data.o,ov_SC05_004_jr_801734BC.o,tail5.data.o,ov_SC05_004_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_004_CHECK_SHA := config/check.ov_SC05_004.sha ov_SC05_004_SYMBOLS := config/symbols.ov_SC05_004.txt ov_SC05_004_SIG := .run/sig.ov_SC05_004.jsonl @@ -2265,7 +2265,7 @@ ov_SC05_005_ELF := $(ov_SC05_005_OUT).elf ov_SC05_005_MAPFILE := $(ov_SC05_005_OUT).map ov_SC05_005_LD_SCRIPT := $(ov_SC05_005_OUT).ld ov_SC05_005_SPLAT_YAML := config/splat.ov_SC05_005.yaml -ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005.o,tail2.data.o,ov_SC05_005_jr_8015AE2C.o,tail3.data.o,ov_SC05_005_jr_801734BC.o,tail4.data.o,ov_SC05_005_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_005_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_005.o,tail2.data.o,ov_SC05_005_after.o,tail3.data.o,ov_SC05_005_jr_8015AE2C.o,tail4.data.o,ov_SC05_005_jr_801734BC.o,tail5.data.o,ov_SC05_005_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_005_CHECK_SHA := config/check.ov_SC05_005.sha ov_SC05_005_SYMBOLS := config/symbols.ov_SC05_005.txt ov_SC05_005_SIG := .run/sig.ov_SC05_005.jsonl @@ -2287,7 +2287,7 @@ ov_SC05_006_ELF := $(ov_SC05_006_OUT).elf ov_SC05_006_MAPFILE := $(ov_SC05_006_OUT).map ov_SC05_006_LD_SCRIPT := $(ov_SC05_006_OUT).ld ov_SC05_006_SPLAT_YAML := config/splat.ov_SC05_006.yaml -ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006.o,tail2.data.o,ov_SC05_006_jr_8015AE2C.o,tail3.data.o,ov_SC05_006_jr_801734BC.o,tail4.data.o,ov_SC05_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_006.o,tail2.data.o,ov_SC05_006_after.o,tail3.data.o,ov_SC05_006_jr_8015AE2C.o,tail4.data.o,ov_SC05_006_jr_801734BC.o,tail5.data.o,ov_SC05_006_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_006_CHECK_SHA := config/check.ov_SC05_006.sha ov_SC05_006_SYMBOLS := config/symbols.ov_SC05_006.txt ov_SC05_006_SIG := .run/sig.ov_SC05_006.jsonl @@ -2309,7 +2309,7 @@ ov_SC05_007_ELF := $(ov_SC05_007_OUT).elf ov_SC05_007_MAPFILE := $(ov_SC05_007_OUT).map ov_SC05_007_LD_SCRIPT := $(ov_SC05_007_OUT).ld ov_SC05_007_SPLAT_YAML := config/splat.ov_SC05_007.yaml -ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007.o,tail2.data.o,ov_SC05_007_jr_8015AE2C.o,tail3.data.o,ov_SC05_007_jr_801734BC.o,tail4.data.o,ov_SC05_007_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_007_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_007.o,tail2.data.o,ov_SC05_007_after.o,tail3.data.o,ov_SC05_007_jr_8015AE2C.o,tail4.data.o,ov_SC05_007_jr_801734BC.o,tail5.data.o,ov_SC05_007_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_007_CHECK_SHA := config/check.ov_SC05_007.sha ov_SC05_007_SYMBOLS := config/symbols.ov_SC05_007.txt ov_SC05_007_SIG := .run/sig.ov_SC05_007.jsonl @@ -2331,7 +2331,7 @@ ov_SC05_008_ELF := $(ov_SC05_008_OUT).elf ov_SC05_008_MAPFILE := $(ov_SC05_008_OUT).map ov_SC05_008_LD_SCRIPT := $(ov_SC05_008_OUT).ld ov_SC05_008_SPLAT_YAML := config/splat.ov_SC05_008.yaml -ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008.o,tail2.data.o,ov_SC05_008_jr_8015AE2C.o,tail3.data.o,ov_SC05_008_jr_801734BC.o,tail4.data.o,ov_SC05_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_008.o,tail2.data.o,ov_SC05_008_after.o,tail3.data.o,ov_SC05_008_jr_8015AE2C.o,tail4.data.o,ov_SC05_008_jr_801734BC.o,tail5.data.o,ov_SC05_008_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_008_CHECK_SHA := config/check.ov_SC05_008.sha ov_SC05_008_SYMBOLS := config/symbols.ov_SC05_008.txt ov_SC05_008_SIG := .run/sig.ov_SC05_008.jsonl @@ -2375,7 +2375,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,tail2.data.o,ov_SC05_010_jr_8015AE2C.o,tail3.data.o,ov_SC05_010_jr_801734BC.o,tail4.data.o,ov_SC05_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,tail2.data.o,ov_SC05_010_after.o,tail3.data.o,ov_SC05_010_jr_8015AE2C.o,tail4.data.o,ov_SC05_010_jr_801734BC.o,tail5.data.o,ov_SC05_010_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha ov_SC05_010_SYMBOLS := config/symbols.ov_SC05_010.txt ov_SC05_010_SIG := .run/sig.ov_SC05_010.jsonl @@ -2397,7 +2397,7 @@ ov_SC05_011_ELF := $(ov_SC05_011_OUT).elf ov_SC05_011_MAPFILE := $(ov_SC05_011_OUT).map ov_SC05_011_LD_SCRIPT := $(ov_SC05_011_OUT).ld ov_SC05_011_SPLAT_YAML := config/splat.ov_SC05_011.yaml -ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011.o,tail2.data.o,ov_SC05_011_jr_8015AE2C.o,tail3.data.o,ov_SC05_011_jr_801734BC.o,tail4.data.o,ov_SC05_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_011.o,tail2.data.o,ov_SC05_011_after.o,tail3.data.o,ov_SC05_011_jr_8015AE2C.o,tail4.data.o,ov_SC05_011_jr_801734BC.o,tail5.data.o,ov_SC05_011_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_011_CHECK_SHA := config/check.ov_SC05_011.sha ov_SC05_011_SYMBOLS := config/symbols.ov_SC05_011.txt ov_SC05_011_SIG := .run/sig.ov_SC05_011.jsonl @@ -2419,7 +2419,7 @@ ov_SC05_017_ELF := $(ov_SC05_017_OUT).elf ov_SC05_017_MAPFILE := $(ov_SC05_017_OUT).map ov_SC05_017_LD_SCRIPT := $(ov_SC05_017_OUT).ld ov_SC05_017_SPLAT_YAML := config/splat.ov_SC05_017.yaml -ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,tail2.data.o,ov_SC05_017_jr_8015AE2C.o,tail3.data.o,ov_SC05_017_jr_801734BC.o,tail4.data.o,ov_SC05_017_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_017_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_017.o,tail2.data.o,ov_SC05_017_after.o,tail3.data.o,ov_SC05_017_jr_8015AE2C.o,tail4.data.o,ov_SC05_017_jr_801734BC.o,tail5.data.o,ov_SC05_017_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_017_CHECK_SHA := config/check.ov_SC05_017.sha ov_SC05_017_SYMBOLS := config/symbols.ov_SC05_017.txt ov_SC05_017_SIG := .run/sig.ov_SC05_017.jsonl @@ -2441,7 +2441,7 @@ ov_SC05_018_ELF := $(ov_SC05_018_OUT).elf ov_SC05_018_MAPFILE := $(ov_SC05_018_OUT).map ov_SC05_018_LD_SCRIPT := $(ov_SC05_018_OUT).ld ov_SC05_018_SPLAT_YAML := config/splat.ov_SC05_018.yaml -ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018.o,tail2.data.o,ov_SC05_018_jr_8015AE2C.o,tail3.data.o,ov_SC05_018_jr_801734BC.o,tail4.data.o,ov_SC05_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_018.o,tail2.data.o,ov_SC05_018_after.o,tail3.data.o,ov_SC05_018_jr_8015AE2C.o,tail4.data.o,ov_SC05_018_jr_801734BC.o,tail5.data.o,ov_SC05_018_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_018_CHECK_SHA := config/check.ov_SC05_018.sha ov_SC05_018_SYMBOLS := config/symbols.ov_SC05_018.txt ov_SC05_018_SIG := .run/sig.ov_SC05_018.jsonl @@ -2463,7 +2463,7 @@ ov_SC05_019_ELF := $(ov_SC05_019_OUT).elf ov_SC05_019_MAPFILE := $(ov_SC05_019_OUT).map ov_SC05_019_LD_SCRIPT := $(ov_SC05_019_OUT).ld ov_SC05_019_SPLAT_YAML := config/splat.ov_SC05_019.yaml -ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019.o,tail2.data.o,ov_SC05_019_jr_8015AE2C.o,tail3.data.o,ov_SC05_019_jr_801734BC.o,tail4.data.o,ov_SC05_019_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_019_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_019.o,tail2.data.o,ov_SC05_019_after.o,tail3.data.o,ov_SC05_019_jr_8015AE2C.o,tail4.data.o,ov_SC05_019_jr_801734BC.o,tail5.data.o,ov_SC05_019_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_019_CHECK_SHA := config/check.ov_SC05_019.sha ov_SC05_019_SYMBOLS := config/symbols.ov_SC05_019.txt ov_SC05_019_SIG := .run/sig.ov_SC05_019.jsonl @@ -2485,7 +2485,7 @@ ov_SC06_006_ELF := $(ov_SC06_006_OUT).elf ov_SC06_006_MAPFILE := $(ov_SC06_006_OUT).map ov_SC06_006_LD_SCRIPT := $(ov_SC06_006_OUT).ld ov_SC06_006_SPLAT_YAML := config/splat.ov_SC06_006.yaml -ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006.o,tail2.data.o,ov_SC06_006_jr_8015AE2C.o,tail3.data.o,ov_SC06_006_jr_801734BC.o,tail4.data.o,ov_SC06_006_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_006.o,tail2.data.o,ov_SC06_006_after.o,tail3.data.o,ov_SC06_006_jr_8015AE2C.o,tail4.data.o,ov_SC06_006_jr_801734BC.o,tail5.data.o,ov_SC06_006_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_006_CHECK_SHA := config/check.ov_SC06_006.sha ov_SC06_006_SYMBOLS := config/symbols.ov_SC06_006.txt ov_SC06_006_SIG := .run/sig.ov_SC06_006.jsonl @@ -2507,7 +2507,7 @@ ov_SC06_008_ELF := $(ov_SC06_008_OUT).elf ov_SC06_008_MAPFILE := $(ov_SC06_008_OUT).map ov_SC06_008_LD_SCRIPT := $(ov_SC06_008_OUT).ld ov_SC06_008_SPLAT_YAML := config/splat.ov_SC06_008.yaml -ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008.o,tail2.data.o,ov_SC06_008_jr_8015AE2C.o,tail3.data.o,ov_SC06_008_jr_801734BC.o,tail4.data.o,ov_SC06_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_008.o,tail2.data.o,ov_SC06_008_after.o,tail3.data.o,ov_SC06_008_jr_8015AE2C.o,tail4.data.o,ov_SC06_008_jr_801734BC.o,tail5.data.o,ov_SC06_008_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_008_CHECK_SHA := config/check.ov_SC06_008.sha ov_SC06_008_SYMBOLS := config/symbols.ov_SC06_008.txt ov_SC06_008_SIG := .run/sig.ov_SC06_008.jsonl @@ -2529,7 +2529,7 @@ ov_SC06_010_ELF := $(ov_SC06_010_OUT).elf ov_SC06_010_MAPFILE := $(ov_SC06_010_OUT).map ov_SC06_010_LD_SCRIPT := $(ov_SC06_010_OUT).ld ov_SC06_010_SPLAT_YAML := config/splat.ov_SC06_010.yaml -ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010.o,tail2.data.o,ov_SC06_010_jr_8015AE2C.o,tail3.data.o,ov_SC06_010_jr_801734BC.o,tail4.data.o,ov_SC06_010_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010.o,tail2.data.o,ov_SC06_010_after.o,tail3.data.o,ov_SC06_010_jr_8015AE2C.o,tail4.data.o,ov_SC06_010_jr_801734BC.o,tail5.data.o,ov_SC06_010_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_010_CHECK_SHA := config/check.ov_SC06_010.sha ov_SC06_010_SYMBOLS := config/symbols.ov_SC06_010.txt ov_SC06_010_SIG := .run/sig.ov_SC06_010.jsonl @@ -2551,7 +2551,7 @@ ov_SC06_011_ELF := $(ov_SC06_011_OUT).elf ov_SC06_011_MAPFILE := $(ov_SC06_011_OUT).map ov_SC06_011_LD_SCRIPT := $(ov_SC06_011_OUT).ld ov_SC06_011_SPLAT_YAML := config/splat.ov_SC06_011.yaml -ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011.o,tail2.data.o,ov_SC06_011_jr_8015AE2C.o,tail3.data.o,ov_SC06_011_jr_801734BC.o,tail4.data.o,ov_SC06_011_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_011.o,tail2.data.o,ov_SC06_011_after.o,tail3.data.o,ov_SC06_011_jr_8015AE2C.o,tail4.data.o,ov_SC06_011_jr_801734BC.o,tail5.data.o,ov_SC06_011_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_011_CHECK_SHA := config/check.ov_SC06_011.sha ov_SC06_011_SYMBOLS := config/symbols.ov_SC06_011.txt ov_SC06_011_SIG := .run/sig.ov_SC06_011.jsonl @@ -2573,7 +2573,7 @@ ov_SC06_013_ELF := $(ov_SC06_013_OUT).elf ov_SC06_013_MAPFILE := $(ov_SC06_013_OUT).map ov_SC06_013_LD_SCRIPT := $(ov_SC06_013_OUT).ld ov_SC06_013_SPLAT_YAML := config/splat.ov_SC06_013.yaml -ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013.o,tail2.data.o,ov_SC06_013_jr_8015AE2C.o,tail3.data.o,ov_SC06_013_jr_801734BC.o,tail4.data.o,ov_SC06_013_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_013_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_013.o,tail2.data.o,ov_SC06_013_after.o,tail3.data.o,ov_SC06_013_jr_8015AE2C.o,tail4.data.o,ov_SC06_013_jr_801734BC.o,tail5.data.o,ov_SC06_013_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_013_CHECK_SHA := config/check.ov_SC06_013.sha ov_SC06_013_SYMBOLS := config/symbols.ov_SC06_013.txt ov_SC06_013_SIG := .run/sig.ov_SC06_013.jsonl @@ -2595,7 +2595,7 @@ ov_SC06_014_ELF := $(ov_SC06_014_OUT).elf ov_SC06_014_MAPFILE := $(ov_SC06_014_OUT).map ov_SC06_014_LD_SCRIPT := $(ov_SC06_014_OUT).ld ov_SC06_014_SPLAT_YAML := config/splat.ov_SC06_014.yaml -ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014.o,tail2.data.o,ov_SC06_014_jr_8015AE2C.o,tail3.data.o,ov_SC06_014_jr_801734BC.o,tail4.data.o,ov_SC06_014_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_014_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_014.o,tail2.data.o,ov_SC06_014_after.o,tail3.data.o,ov_SC06_014_jr_8015AE2C.o,tail4.data.o,ov_SC06_014_jr_801734BC.o,tail5.data.o,ov_SC06_014_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_014_CHECK_SHA := config/check.ov_SC06_014.sha ov_SC06_014_SYMBOLS := config/symbols.ov_SC06_014.txt ov_SC06_014_SIG := .run/sig.ov_SC06_014.jsonl @@ -2617,7 +2617,7 @@ ov_SC06_015_ELF := $(ov_SC06_015_OUT).elf ov_SC06_015_MAPFILE := $(ov_SC06_015_OUT).map ov_SC06_015_LD_SCRIPT := $(ov_SC06_015_OUT).ld ov_SC06_015_SPLAT_YAML := config/splat.ov_SC06_015.yaml -ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015.o,tail2.data.o,ov_SC06_015_jr_8015AE2C.o,tail3.data.o,ov_SC06_015_jr_801734BC.o,tail4.data.o,ov_SC06_015_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_015_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_015.o,tail2.data.o,ov_SC06_015_after.o,tail3.data.o,ov_SC06_015_jr_8015AE2C.o,tail4.data.o,ov_SC06_015_jr_801734BC.o,tail5.data.o,ov_SC06_015_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_015_CHECK_SHA := config/check.ov_SC06_015.sha ov_SC06_015_SYMBOLS := config/symbols.ov_SC06_015.txt ov_SC06_015_SIG := .run/sig.ov_SC06_015.jsonl @@ -2639,7 +2639,7 @@ ov_SC06_016_ELF := $(ov_SC06_016_OUT).elf ov_SC06_016_MAPFILE := $(ov_SC06_016_OUT).map ov_SC06_016_LD_SCRIPT := $(ov_SC06_016_OUT).ld ov_SC06_016_SPLAT_YAML := config/splat.ov_SC06_016.yaml -ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016.o,tail2.data.o,ov_SC06_016_jr_8015AE2C.o,tail3.data.o,ov_SC06_016_jr_801734BC.o,tail4.data.o,ov_SC06_016_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_016.o,tail2.data.o,ov_SC06_016_after.o,tail3.data.o,ov_SC06_016_jr_8015AE2C.o,tail4.data.o,ov_SC06_016_jr_801734BC.o,tail5.data.o,ov_SC06_016_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_016_CHECK_SHA := config/check.ov_SC06_016.sha ov_SC06_016_SYMBOLS := config/symbols.ov_SC06_016.txt ov_SC06_016_SIG := .run/sig.ov_SC06_016.jsonl @@ -2661,7 +2661,7 @@ ov_SC06_018_ELF := $(ov_SC06_018_OUT).elf ov_SC06_018_MAPFILE := $(ov_SC06_018_OUT).map ov_SC06_018_LD_SCRIPT := $(ov_SC06_018_OUT).ld ov_SC06_018_SPLAT_YAML := config/splat.ov_SC06_018.yaml -ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018.o,tail2.data.o,ov_SC06_018_jr_8015AE2C.o,tail3.data.o,ov_SC06_018_jr_801734BC.o,tail4.data.o,ov_SC06_018_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_018_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_018.o,tail2.data.o,ov_SC06_018_after.o,tail3.data.o,ov_SC06_018_jr_8015AE2C.o,tail4.data.o,ov_SC06_018_jr_801734BC.o,tail5.data.o,ov_SC06_018_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_018_CHECK_SHA := config/check.ov_SC06_018.sha ov_SC06_018_SYMBOLS := config/symbols.ov_SC06_018.txt ov_SC06_018_SIG := .run/sig.ov_SC06_018.jsonl @@ -2683,7 +2683,7 @@ ov_SC06_020_ELF := $(ov_SC06_020_OUT).elf ov_SC06_020_MAPFILE := $(ov_SC06_020_OUT).map ov_SC06_020_LD_SCRIPT := $(ov_SC06_020_OUT).ld ov_SC06_020_SPLAT_YAML := config/splat.ov_SC06_020.yaml -ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020.o,tail2.data.o,ov_SC06_020_jr_8015AE2C.o,tail3.data.o,ov_SC06_020_jr_801734BC.o,tail4.data.o,ov_SC06_020_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_020_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_020.o,tail2.data.o,ov_SC06_020_after.o,tail3.data.o,ov_SC06_020_jr_8015AE2C.o,tail4.data.o,ov_SC06_020_jr_801734BC.o,tail5.data.o,ov_SC06_020_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_020_CHECK_SHA := config/check.ov_SC06_020.sha ov_SC06_020_SYMBOLS := config/symbols.ov_SC06_020.txt ov_SC06_020_SIG := .run/sig.ov_SC06_020.jsonl @@ -2705,7 +2705,7 @@ ov_SC06_022_ELF := $(ov_SC06_022_OUT).elf ov_SC06_022_MAPFILE := $(ov_SC06_022_OUT).map ov_SC06_022_LD_SCRIPT := $(ov_SC06_022_OUT).ld ov_SC06_022_SPLAT_YAML := config/splat.ov_SC06_022.yaml -ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,tail2.data.o,ov_SC06_022_jr_8015AE2C.o,tail3.data.o,ov_SC06_022_jr_801734BC.o,tail4.data.o,ov_SC06_022_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,tail2.data.o,ov_SC06_022_after.o,tail3.data.o,ov_SC06_022_jr_8015AE2C.o,tail4.data.o,ov_SC06_022_jr_801734BC.o,tail5.data.o,ov_SC06_022_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_022_CHECK_SHA := config/check.ov_SC06_022.sha ov_SC06_022_SYMBOLS := config/symbols.ov_SC06_022.txt ov_SC06_022_SIG := .run/sig.ov_SC06_022.jsonl @@ -2727,7 +2727,7 @@ ov_SC06_024_ELF := $(ov_SC06_024_OUT).elf ov_SC06_024_MAPFILE := $(ov_SC06_024_OUT).map ov_SC06_024_LD_SCRIPT := $(ov_SC06_024_OUT).ld ov_SC06_024_SPLAT_YAML := config/splat.ov_SC06_024.yaml -ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024.o,tail2.data.o,ov_SC06_024_jr_8015AE2C.o,tail3.data.o,ov_SC06_024_jr_801734BC.o,tail4.data.o,ov_SC06_024_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_024_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_024.o,tail2.data.o,ov_SC06_024_after.o,tail3.data.o,ov_SC06_024_jr_8015AE2C.o,tail4.data.o,ov_SC06_024_jr_801734BC.o,tail5.data.o,ov_SC06_024_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_024_CHECK_SHA := config/check.ov_SC06_024.sha ov_SC06_024_SYMBOLS := config/symbols.ov_SC06_024.txt ov_SC06_024_SIG := .run/sig.ov_SC06_024.jsonl @@ -2749,7 +2749,7 @@ ov_SC06_025_ELF := $(ov_SC06_025_OUT).elf ov_SC06_025_MAPFILE := $(ov_SC06_025_OUT).map ov_SC06_025_LD_SCRIPT := $(ov_SC06_025_OUT).ld ov_SC06_025_SPLAT_YAML := config/splat.ov_SC06_025.yaml -ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025.o,tail2.data.o,ov_SC06_025_jr_8015AE2C.o,tail3.data.o,ov_SC06_025_jr_801734BC.o,tail4.data.o,ov_SC06_025_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_025_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_025.o,tail2.data.o,ov_SC06_025_after.o,tail3.data.o,ov_SC06_025_jr_8015AE2C.o,tail4.data.o,ov_SC06_025_jr_801734BC.o,tail5.data.o,ov_SC06_025_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_025_CHECK_SHA := config/check.ov_SC06_025.sha ov_SC06_025_SYMBOLS := config/symbols.ov_SC06_025.txt ov_SC06_025_SIG := .run/sig.ov_SC06_025.jsonl @@ -2771,7 +2771,7 @@ ov_SC06_027_ELF := $(ov_SC06_027_OUT).elf ov_SC06_027_MAPFILE := $(ov_SC06_027_OUT).map ov_SC06_027_LD_SCRIPT := $(ov_SC06_027_OUT).ld ov_SC06_027_SPLAT_YAML := config/splat.ov_SC06_027.yaml -ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027.o,tail2.data.o,ov_SC06_027_jr_8015AE2C.o,tail3.data.o,ov_SC06_027_jr_801734BC.o,tail4.data.o,ov_SC06_027_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_027_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_027.o,tail2.data.o,ov_SC06_027_after.o,tail3.data.o,ov_SC06_027_jr_8015AE2C.o,tail4.data.o,ov_SC06_027_jr_801734BC.o,tail5.data.o,ov_SC06_027_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_027_CHECK_SHA := config/check.ov_SC06_027.sha ov_SC06_027_SYMBOLS := config/symbols.ov_SC06_027.txt ov_SC06_027_SIG := .run/sig.ov_SC06_027.jsonl @@ -2793,7 +2793,7 @@ ov_SC06_029_ELF := $(ov_SC06_029_OUT).elf ov_SC06_029_MAPFILE := $(ov_SC06_029_OUT).map ov_SC06_029_LD_SCRIPT := $(ov_SC06_029_OUT).ld ov_SC06_029_SPLAT_YAML := config/splat.ov_SC06_029.yaml -ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029.o,tail2.data.o,ov_SC06_029_jr_8015AE2C.o,tail3.data.o,ov_SC06_029_jr_801734BC.o,tail4.data.o,ov_SC06_029_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_029_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_029.o,tail2.data.o,ov_SC06_029_after.o,tail3.data.o,ov_SC06_029_jr_8015AE2C.o,tail4.data.o,ov_SC06_029_jr_801734BC.o,tail5.data.o,ov_SC06_029_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_029_CHECK_SHA := config/check.ov_SC06_029.sha ov_SC06_029_SYMBOLS := config/symbols.ov_SC06_029.txt ov_SC06_029_SIG := .run/sig.ov_SC06_029.jsonl @@ -2815,7 +2815,7 @@ ov_SC06_030_ELF := $(ov_SC06_030_OUT).elf ov_SC06_030_MAPFILE := $(ov_SC06_030_OUT).map ov_SC06_030_LD_SCRIPT := $(ov_SC06_030_OUT).ld ov_SC06_030_SPLAT_YAML := config/splat.ov_SC06_030.yaml -ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030.o,tail2.data.o,ov_SC06_030_jr_8015AE2C.o,tail3.data.o,ov_SC06_030_jr_801734BC.o,tail4.data.o,ov_SC06_030_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_030.o,tail2.data.o,ov_SC06_030_after.o,tail3.data.o,ov_SC06_030_jr_8015AE2C.o,tail4.data.o,ov_SC06_030_jr_801734BC.o,tail5.data.o,ov_SC06_030_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_030_CHECK_SHA := config/check.ov_SC06_030.sha ov_SC06_030_SYMBOLS := config/symbols.ov_SC06_030.txt ov_SC06_030_SIG := .run/sig.ov_SC06_030.jsonl @@ -2837,7 +2837,7 @@ ov_SC06_032_ELF := $(ov_SC06_032_OUT).elf ov_SC06_032_MAPFILE := $(ov_SC06_032_OUT).map ov_SC06_032_LD_SCRIPT := $(ov_SC06_032_OUT).ld ov_SC06_032_SPLAT_YAML := config/splat.ov_SC06_032.yaml -ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032.o,tail2.data.o,ov_SC06_032_jr_8015AE2C.o,tail3.data.o,ov_SC06_032_jr_801734BC.o,tail4.data.o,ov_SC06_032_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_032_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_032.o,tail2.data.o,ov_SC06_032_after.o,tail3.data.o,ov_SC06_032_jr_8015AE2C.o,tail4.data.o,ov_SC06_032_jr_801734BC.o,tail5.data.o,ov_SC06_032_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_032_CHECK_SHA := config/check.ov_SC06_032.sha ov_SC06_032_SYMBOLS := config/symbols.ov_SC06_032.txt ov_SC06_032_SIG := .run/sig.ov_SC06_032.jsonl @@ -2859,7 +2859,7 @@ ov_SC06_033_ELF := $(ov_SC06_033_OUT).elf ov_SC06_033_MAPFILE := $(ov_SC06_033_OUT).map ov_SC06_033_LD_SCRIPT := $(ov_SC06_033_OUT).ld ov_SC06_033_SPLAT_YAML := config/splat.ov_SC06_033.yaml -ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033.o,tail2.data.o,ov_SC06_033_jr_8015AE2C.o,tail3.data.o,ov_SC06_033_jr_801734BC.o,tail4.data.o,ov_SC06_033_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_033_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_033.o,tail2.data.o,ov_SC06_033_after.o,tail3.data.o,ov_SC06_033_jr_8015AE2C.o,tail4.data.o,ov_SC06_033_jr_801734BC.o,tail5.data.o,ov_SC06_033_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_033_CHECK_SHA := config/check.ov_SC06_033.sha ov_SC06_033_SYMBOLS := config/symbols.ov_SC06_033.txt ov_SC06_033_SIG := .run/sig.ov_SC06_033.jsonl @@ -2881,7 +2881,7 @@ ov_SC07_001_ELF := $(ov_SC07_001_OUT).elf ov_SC07_001_MAPFILE := $(ov_SC07_001_OUT).map ov_SC07_001_LD_SCRIPT := $(ov_SC07_001_OUT).ld ov_SC07_001_SPLAT_YAML := config/splat.ov_SC07_001.yaml -ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001.o,tail2.data.o,ov_SC07_001_jr_8015AE2C.o,tail3.data.o,ov_SC07_001_jr_801734BC.o,tail4.data.o,ov_SC07_001_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_001_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_001.o,tail2.data.o,ov_SC07_001_after.o,tail3.data.o,ov_SC07_001_jr_8015AE2C.o,tail4.data.o,ov_SC07_001_jr_801734BC.o,tail5.data.o,ov_SC07_001_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_001_CHECK_SHA := config/check.ov_SC07_001.sha ov_SC07_001_SYMBOLS := config/symbols.ov_SC07_001.txt ov_SC07_001_SIG := .run/sig.ov_SC07_001.jsonl @@ -2903,7 +2903,7 @@ ov_SC07_002_ELF := $(ov_SC07_002_OUT).elf ov_SC07_002_MAPFILE := $(ov_SC07_002_OUT).map ov_SC07_002_LD_SCRIPT := $(ov_SC07_002_OUT).ld ov_SC07_002_SPLAT_YAML := config/splat.ov_SC07_002.yaml -ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002.o,tail2.data.o,ov_SC07_002_jr_8015AE2C.o,tail3.data.o,ov_SC07_002_jr_801734BC.o,tail4.data.o,ov_SC07_002_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_002_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_002.o,tail2.data.o,ov_SC07_002_after.o,tail3.data.o,ov_SC07_002_jr_8015AE2C.o,tail4.data.o,ov_SC07_002_jr_801734BC.o,tail5.data.o,ov_SC07_002_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_002_CHECK_SHA := config/check.ov_SC07_002.sha ov_SC07_002_SYMBOLS := config/symbols.ov_SC07_002.txt ov_SC07_002_SIG := .run/sig.ov_SC07_002.jsonl @@ -2925,7 +2925,7 @@ ov_SC07_008_ELF := $(ov_SC07_008_OUT).elf ov_SC07_008_MAPFILE := $(ov_SC07_008_OUT).map ov_SC07_008_LD_SCRIPT := $(ov_SC07_008_OUT).ld ov_SC07_008_SPLAT_YAML := config/splat.ov_SC07_008.yaml -ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008.o,tail2.data.o,ov_SC07_008_jr_8015AE2C.o,tail3.data.o,ov_SC07_008_jr_801734BC.o,tail4.data.o,ov_SC07_008_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_008_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_008.o,tail2.data.o,ov_SC07_008_after.o,tail3.data.o,ov_SC07_008_jr_8015AE2C.o,tail4.data.o,ov_SC07_008_jr_801734BC.o,tail5.data.o,ov_SC07_008_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_008_CHECK_SHA := config/check.ov_SC07_008.sha ov_SC07_008_SYMBOLS := config/symbols.ov_SC07_008.txt ov_SC07_008_SIG := .run/sig.ov_SC07_008.jsonl @@ -2947,7 +2947,7 @@ ov_SC07_009_ELF := $(ov_SC07_009_OUT).elf ov_SC07_009_MAPFILE := $(ov_SC07_009_OUT).map ov_SC07_009_LD_SCRIPT := $(ov_SC07_009_OUT).ld ov_SC07_009_SPLAT_YAML := config/splat.ov_SC07_009.yaml -ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009.o,tail2.data.o,ov_SC07_009_jr_8015AE2C.o,tail3.data.o,ov_SC07_009_jr_801734BC.o,tail4.data.o,ov_SC07_009_jr_80178D40.o,tail5.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_009.o,tail2.data.o,ov_SC07_009_after.o,tail3.data.o,ov_SC07_009_jr_8015AE2C.o,tail4.data.o,ov_SC07_009_jr_801734BC.o,tail5.data.o,ov_SC07_009_jr_80178D40.o,tail6.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_009_CHECK_SHA := config/check.ov_SC07_009.sha ov_SC07_009_SYMBOLS := config/symbols.ov_SC07_009.txt ov_SC07_009_SIG := .run/sig.ov_SC07_009.jsonl diff --git a/config/splat.ov_SC01_000.yaml b/config/splat.ov_SC01_000.yaml index 8da3cfbab..9a8365fcb 100644 --- a/config/splat.ov_SC01_000.yaml +++ b/config/splat.ov_SC01_000.yaml @@ -103,14 +103,16 @@ segments: - [0x56a64, data, tail] - [0x7b1c4, .rodata, ov_SC01_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7b290, data, tail2] + - [0x7bc80, .rodata, ov_SC01_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bc9c, data, tail3] - [0x7bca0, .rodata, ov_SC01_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bcbc, data, tail3] + - [0x7bcbc, data, tail4] - [0x7bdb4, .rodata, ov_SC01_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bdc8, data, tail4] + - [0x7bdc8, data, tail5] - [0x7bf70, .rodata, ov_SC01_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c0e8, data, tail5] + - [0x7c0e8, data, tail6] - [0x7c21c, .rodata, ov_SC01_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c23c, data, tail6] + - [0x7c23c, data, tail7] - [0x7D78C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7D78F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_001.yaml b/config/splat.ov_SC01_001.yaml index 440417244..5714dfad1 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -102,12 +102,14 @@ segments: - [0x5b6b4, data, tail] - [0xc329c, .rodata, ov_SC01_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3368, data, tail2] + - [0xc3d58, .rodata, ov_SC01_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3d74, data, tail3] - [0xc3d78, .rodata, ov_SC01_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d94, data, tail3] + - [0xc3d94, data, tail4] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3ea0, data, tail4] + - [0xc3ea0, data, tail5] - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc41c0, data, tail5] + - [0xc41c0, data, tail6] - [0xCB06C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCB06F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_004.yaml b/config/splat.ov_SC01_004.yaml index fcb3eafbc..46feb8bd7 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -102,12 +102,14 @@ segments: - [0x57078, data, tail] - [0x6567c, .rodata, ov_SC01_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65748, data, tail2] + - [0x66138, .rodata, ov_SC01_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66154, data, tail3] - [0x66158, .rodata, ov_SC01_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66174, data, tail3] + - [0x66174, data, tail4] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66280, data, tail4] + - [0x66280, data, tail5] - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x665a0, data, tail5] + - [0x665a0, data, tail6] - [0x68274, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68277] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_005.yaml b/config/splat.ov_SC01_005.yaml index edb871247..a495bf4b1 100644 --- a/config/splat.ov_SC01_005.yaml +++ b/config/splat.ov_SC01_005.yaml @@ -102,12 +102,14 @@ segments: - [0x5a20c, data, tail] - [0xa2ddc, .rodata, ov_SC01_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2ea8, data, tail2] + - [0xa3898, .rodata, ov_SC01_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa38b4, data, tail3] - [0xa38b8, .rodata, ov_SC01_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail3] + - [0xa38d4, data, tail4] - [0xa39cc, .rodata, ov_SC01_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail4] + - [0xa39e0, data, tail5] - [0xa3b88, .rodata, ov_SC01_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail5] + - [0xa3d00, data, tail6] - [0xA5F08, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA5F09] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_006.yaml b/config/splat.ov_SC01_006.yaml index 98c360642..2b8fdebd3 100644 --- a/config/splat.ov_SC01_006.yaml +++ b/config/splat.ov_SC01_006.yaml @@ -102,12 +102,14 @@ segments: - [0x5a20c, data, tail] - [0xa2ddc, .rodata, ov_SC01_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa2ea8, data, tail2] + - [0xa3898, .rodata, ov_SC01_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa38b4, data, tail3] - [0xa38b8, .rodata, ov_SC01_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail3] + - [0xa38d4, data, tail4] - [0xa39cc, .rodata, ov_SC01_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail4] + - [0xa39e0, data, tail5] - [0xa3b88, .rodata, ov_SC01_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail5] + - [0xa3d00, data, tail6] - [0xA5F08, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA5F09] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_008.yaml b/config/splat.ov_SC01_008.yaml index 518e3e014..3ee028cf1 100644 --- a/config/splat.ov_SC01_008.yaml +++ b/config/splat.ov_SC01_008.yaml @@ -102,12 +102,14 @@ segments: - [0x575ec, data, tail] - [0x7888c, .rodata, ov_SC01_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78958, data, tail2] + - [0x79348, .rodata, ov_SC01_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x79364, data, tail3] - [0x79368, .rodata, ov_SC01_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79384, data, tail3] + - [0x79384, data, tail4] - [0x7947c, .rodata, ov_SC01_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79490, data, tail4] + - [0x79490, data, tail5] - [0x79638, .rodata, ov_SC01_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x797b0, data, tail5] + - [0x797b0, data, tail6] - [0x7B484, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7B487] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_009.yaml b/config/splat.ov_SC01_009.yaml index a2066b552..2d6f3649b 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -102,12 +102,14 @@ segments: - [0x5a7d4, data, tail] - [0xc8650, .rodata, ov_SC01_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc871c, data, tail2] + - [0xc910c, .rodata, ov_SC01_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc9128, data, tail3] - [0xc912c, .rodata, ov_SC01_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9148, data, tail3] + - [0xc9148, data, tail4] - [0xc9240, .rodata, ov_SC01_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9254, data, tail4] + - [0xc9254, data, tail5] - [0xc93fc, .rodata, ov_SC01_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9574, data, tail5] + - [0xc9574, data, tail6] - [0xCB304, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCB307] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_074.yaml b/config/splat.ov_SC01_074.yaml index 8dc4bdfe0..3a6889121 100644 --- a/config/splat.ov_SC01_074.yaml +++ b/config/splat.ov_SC01_074.yaml @@ -102,12 +102,14 @@ segments: - [0x56454, data, tail] - [0x716e0, .rodata, ov_SC01_074] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x717ac, data, tail2] + - [0x7219c, .rodata, ov_SC01_074_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x721b8, data, tail3] - [0x721bc, .rodata, ov_SC01_074_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721d8, data, tail3] + - [0x721d8, data, tail4] - [0x722d0, .rodata, ov_SC01_074_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722e4, data, tail4] + - [0x722e4, data, tail5] - [0x7248c, .rodata, ov_SC01_074_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72604, data, tail5] + - [0x72604, data, tail6] - [0x73C14, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73C17] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_080.yaml b/config/splat.ov_SC01_080.yaml index c7a7170f9..48715d7b6 100644 --- a/config/splat.ov_SC01_080.yaml +++ b/config/splat.ov_SC01_080.yaml @@ -102,12 +102,14 @@ segments: - [0x5b3b4, data, tail] - [0x9b500, .rodata, ov_SC01_080] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b5cc, data, tail2] + - [0x9bfbc, .rodata, ov_SC01_080_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9bfd8, data, tail3] - [0x9bfdc, .rodata, ov_SC01_080_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bff8, data, tail3] + - [0x9bff8, data, tail4] - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c104, data, tail4] + - [0x9c104, data, tail5] - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c424, data, tail5] + - [0x9c424, data, tail6] - [0x9FDF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FDF7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC01_084.yaml b/config/splat.ov_SC01_084.yaml index b66193f55..8909acf71 100644 --- a/config/splat.ov_SC01_084.yaml +++ b/config/splat.ov_SC01_084.yaml @@ -102,12 +102,14 @@ segments: - [0x5e6a8, data, tail] - [0x9ced0, .rodata, ov_SC01_084] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9cf9c, data, tail2] + - [0x9d98c, .rodata, ov_SC01_084_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d9a8, data, tail3] - [0x9d9ac, .rodata, ov_SC01_084_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d9c8, data, tail3] + - [0x9d9c8, data, tail4] - [0x9dac0, .rodata, ov_SC01_084_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9dad4, data, tail4] + - [0x9dad4, data, tail5] - [0x9dc7c, .rodata, ov_SC01_084_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ddf4, data, tail5] + - [0x9ddf4, data, tail6] - [0x9FA9C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FA9F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_000.yaml b/config/splat.ov_SC02_000.yaml index bf7b3d6a1..2ec386fc7 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -103,14 +103,16 @@ segments: - [0x62a58, data, tail] - [0xbd724, .rodata, ov_SC02_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbd7f0, data, tail2] + - [0xbe1e0, .rodata, ov_SC02_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe1fc, data, tail3] - [0xbe200, .rodata, ov_SC02_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail3] + - [0xbe21c, data, tail4] - [0xbe314, .rodata, ov_SC02_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail4] + - [0xbe328, data, tail5] - [0xbe4d0, .rodata, ov_SC02_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail5] + - [0xbe648, data, tail6] - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail6] + - [0xbe964, data, tail7] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_003.yaml b/config/splat.ov_SC02_003.yaml index 3c7b480ee..c08ff655b 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -103,14 +103,16 @@ segments: - [0x62a58, data, tail] - [0xbd724, .rodata, ov_SC02_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbd7f0, data, tail2] + - [0xbe1e0, .rodata, ov_SC02_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe1fc, data, tail3] - [0xbe200, .rodata, ov_SC02_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail3] + - [0xbe21c, data, tail4] - [0xbe314, .rodata, ov_SC02_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail4] + - [0xbe328, data, tail5] - [0xbe4d0, .rodata, ov_SC02_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail5] + - [0xbe648, data, tail6] - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail6] + - [0xbe964, data, tail7] - [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC070F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_004.yaml b/config/splat.ov_SC02_004.yaml index beffce8a4..365920df0 100644 --- a/config/splat.ov_SC02_004.yaml +++ b/config/splat.ov_SC02_004.yaml @@ -102,12 +102,14 @@ segments: - [0x55b38, data, tail] - [0x6bd34, .rodata, ov_SC02_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6be00, data, tail2] + - [0x6c7f0, .rodata, ov_SC02_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c80c, data, tail3] - [0x6c810, .rodata, ov_SC02_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c82c, data, tail3] + - [0x6c82c, data, tail4] - [0x6c924, .rodata, ov_SC02_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c938, data, tail4] + - [0x6c938, data, tail5] - [0x6cae0, .rodata, ov_SC02_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc58, data, tail5] + - [0x6cc58, data, tail6] - [0x6E26C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6E26F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_005.yaml b/config/splat.ov_SC02_005.yaml index 5ff4ced7e..2024d55e0 100644 --- a/config/splat.ov_SC02_005.yaml +++ b/config/splat.ov_SC02_005.yaml @@ -102,12 +102,14 @@ segments: - [0x6873c, data, tail] - [0xb9a68, .rodata, ov_SC02_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb9b34, data, tail2] + - [0xba524, .rodata, ov_SC02_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba540, data, tail3] - [0xba544, .rodata, ov_SC02_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba560, data, tail3] + - [0xba560, data, tail4] - [0xba658, .rodata, ov_SC02_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba66c, data, tail4] + - [0xba66c, data, tail5] - [0xba814, .rodata, ov_SC02_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba98c, data, tail5] + - [0xba98c, data, tail6] - [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 diff --git a/config/splat.ov_SC02_011.yaml b/config/splat.ov_SC02_011.yaml index 8ec73e090..7bb6c7025 100644 --- a/config/splat.ov_SC02_011.yaml +++ b/config/splat.ov_SC02_011.yaml @@ -102,12 +102,14 @@ segments: - [0x68b8c, data, tail] - [0xc0bc4, .rodata, ov_SC02_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0c90, data, tail2] + - [0xc1680, .rodata, ov_SC02_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc169c, data, tail3] - [0xc16a0, .rodata, ov_SC02_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc16bc, data, tail3] + - [0xc16bc, data, tail4] - [0xc17b4, .rodata, ov_SC02_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17c8, data, tail4] + - [0xc17c8, data, tail5] - [0xc1970, .rodata, ov_SC02_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1ae8, data, tail5] + - [0xc1ae8, data, tail6] - [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 diff --git a/config/splat.ov_SC02_015.yaml b/config/splat.ov_SC02_015.yaml index 11f84936f..3baf541ee 100644 --- a/config/splat.ov_SC02_015.yaml +++ b/config/splat.ov_SC02_015.yaml @@ -102,12 +102,14 @@ segments: - [0x560a0, data, tail] - [0x65e1c, .rodata, ov_SC02_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65ee8, data, tail2] + - [0x668d8, .rodata, ov_SC02_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x668f4, data, tail3] - [0x668f8, .rodata, ov_SC02_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66914, data, tail3] + - [0x66914, data, tail4] - [0x66a0c, .rodata, ov_SC02_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66a20, data, tail4] + - [0x66a20, data, tail5] - [0x66bc8, .rodata, ov_SC02_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66d40, data, tail5] + - [0x66d40, data, tail6] - [0x68544, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68547] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_016.yaml b/config/splat.ov_SC02_016.yaml index adb763885..2f0bec98b 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -102,12 +102,14 @@ segments: - [0x5c2d8, data, tail] - [0x899fc, .rodata, ov_SC02_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89ac8, data, tail2] + - [0x8a4b8, .rodata, ov_SC02_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a4d4, data, tail3] - [0x8a4d8, .rodata, ov_SC02_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4f4, data, tail3] + - [0x8a4f4, data, tail4] - [0x8a5ec, .rodata, ov_SC02_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a600, data, tail4] + - [0x8a600, data, tail5] - [0x8a7a8, .rodata, ov_SC02_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a920, data, tail5] + - [0x8a920, data, tail6] - [0x8C97C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8C97F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_017.yaml b/config/splat.ov_SC02_017.yaml index feac7f1d9..1dacd175a 100644 --- a/config/splat.ov_SC02_017.yaml +++ b/config/splat.ov_SC02_017.yaml @@ -102,12 +102,14 @@ segments: - [0x62330, data, tail] - [0xc521c, .rodata, ov_SC02_017] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc52e8, data, tail2] + - [0xc5cd8, .rodata, ov_SC02_017_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5cf4, data, tail3] - [0xc5cf8, .rodata, ov_SC02_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d14, data, tail3] + - [0xc5d14, data, tail4] - [0xc5e0c, .rodata, ov_SC02_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5e20, data, tail4] + - [0xc5e20, data, tail5] - [0xc5fc8, .rodata, ov_SC02_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc6140, data, tail5] + - [0xc6140, data, tail6] - [0xC7BDC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC7BDF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_021.yaml b/config/splat.ov_SC02_021.yaml index b3466ff08..064e3b36d 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -102,12 +102,14 @@ segments: - [0x57924, data, tail] - [0x68798, .rodata, ov_SC02_021] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68864, data, tail2] + - [0x69254, .rodata, ov_SC02_021_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x69270, data, tail3] - [0x69274, .rodata, ov_SC02_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69290, data, tail3] + - [0x69290, data, tail4] - [0x69388, .rodata, ov_SC02_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6939c, data, tail4] + - [0x6939c, data, tail5] - [0x69544, .rodata, ov_SC02_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x696bc, data, tail5] + - [0x696bc, data, tail6] - [0x6B744, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B747] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_026.yaml b/config/splat.ov_SC02_026.yaml index f09a27b6b..4daa00499 100644 --- a/config/splat.ov_SC02_026.yaml +++ b/config/splat.ov_SC02_026.yaml @@ -102,12 +102,14 @@ segments: - [0x5df78, data, tail] - [0xa5bcc, .rodata, ov_SC02_026] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5c98, data, tail2] + - [0xa6688, .rodata, ov_SC02_026_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa66a4, data, tail3] - [0xa66a8, .rodata, ov_SC02_026_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa66c4, data, tail3] + - [0xa66c4, data, tail4] - [0xa67bc, .rodata, ov_SC02_026_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa67d0, data, tail4] + - [0xa67d0, data, tail5] - [0xa6978, .rodata, ov_SC02_026_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6af0, data, tail5] + - [0xa6af0, data, tail6] - [0xA8164, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8167] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_027.yaml b/config/splat.ov_SC02_027.yaml index ddc37ff4f..4bb5b7b91 100644 --- a/config/splat.ov_SC02_027.yaml +++ b/config/splat.ov_SC02_027.yaml @@ -102,12 +102,14 @@ segments: - [0x6309c, data, tail] - [0xaf938, .rodata, ov_SC02_027] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xafa04, data, tail2] + - [0xb03f4, .rodata, ov_SC02_027_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb0410, data, tail3] - [0xb0414, .rodata, ov_SC02_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0430, data, tail3] + - [0xb0430, data, tail4] - [0xb0528, .rodata, ov_SC02_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb053c, data, tail4] + - [0xb053c, data, tail5] - [0xb06e4, .rodata, ov_SC02_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb085c, data, tail5] + - [0xb085c, data, tail6] - [0xB28E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB28E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_028.yaml b/config/splat.ov_SC02_028.yaml index d07357048..4ff02d158 100644 --- a/config/splat.ov_SC02_028.yaml +++ b/config/splat.ov_SC02_028.yaml @@ -102,12 +102,14 @@ segments: - [0x632a0, data, tail] - [0xa88bc, .rodata, ov_SC02_028] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8988, data, tail2] + - [0xa9378, .rodata, ov_SC02_028_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9394, data, tail3] - [0xa9398, .rodata, ov_SC02_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa93b4, data, tail3] + - [0xa93b4, data, tail4] - [0xa94ac, .rodata, ov_SC02_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa94c0, data, tail4] + - [0xa94c0, data, tail5] - [0xa9668, .rodata, ov_SC02_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97e0, data, tail5] + - [0xa97e0, data, tail6] - [0xAB4E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAB4E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_031.yaml b/config/splat.ov_SC02_031.yaml index d692b201e..302a16067 100644 --- a/config/splat.ov_SC02_031.yaml +++ b/config/splat.ov_SC02_031.yaml @@ -102,12 +102,14 @@ segments: - [0x5cacc, data, tail] - [0x8d0b8, .rodata, ov_SC02_031] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8d184, data, tail2] + - [0x8db74, .rodata, ov_SC02_031_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8db90, data, tail3] - [0x8db94, .rodata, ov_SC02_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dbb0, data, tail3] + - [0x8dbb0, data, tail4] - [0x8dca8, .rodata, ov_SC02_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dcbc, data, tail4] + - [0x8dcbc, data, tail5] - [0x8de64, .rodata, ov_SC02_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dfdc, data, tail5] + - [0x8dfdc, data, tail6] - [0x8F9B4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8F9B7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_035.yaml b/config/splat.ov_SC02_035.yaml index 43a4d8117..6a60657cb 100644 --- a/config/splat.ov_SC02_035.yaml +++ b/config/splat.ov_SC02_035.yaml @@ -102,12 +102,14 @@ segments: - [0x5c32c, data, tail] - [0x94380, .rodata, ov_SC02_035] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9444c, data, tail2] + - [0x94e3c, .rodata, ov_SC02_035_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x94e58, data, tail3] - [0x94e5c, .rodata, ov_SC02_035_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e78, data, tail3] + - [0x94e78, data, tail4] - [0x94f70, .rodata, ov_SC02_035_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94f84, data, tail4] + - [0x94f84, data, tail5] - [0x9512c, .rodata, ov_SC02_035_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x952a4, data, tail5] + - [0x952a4, data, tail6] - [0x968EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x968EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_039.yaml b/config/splat.ov_SC02_039.yaml index e991a0922..b85f5be98 100644 --- a/config/splat.ov_SC02_039.yaml +++ b/config/splat.ov_SC02_039.yaml @@ -102,12 +102,14 @@ segments: - [0x56f58, data, tail] - [0x7676c, .rodata, ov_SC02_039] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76838, data, tail2] + - [0x77228, .rodata, ov_SC02_039_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77244, data, tail3] - [0x77248, .rodata, ov_SC02_039_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77264, data, tail3] + - [0x77264, data, tail4] - [0x7735c, .rodata, ov_SC02_039_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77370, data, tail4] + - [0x77370, data, tail5] - [0x77518, .rodata, ov_SC02_039_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77690, data, tail5] + - [0x77690, data, tail6] - [0x78CA4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78CA7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC02_041.yaml b/config/splat.ov_SC02_041.yaml index aad9bec28..5e30ccf37 100644 --- a/config/splat.ov_SC02_041.yaml +++ b/config/splat.ov_SC02_041.yaml @@ -102,12 +102,14 @@ segments: - [0x5cc28, data, tail] - [0x8ead8, .rodata, ov_SC02_041] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8eba4, data, tail2] + - [0x8f594, .rodata, ov_SC02_041_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f5b0, data, tail3] - [0x8f5b4, .rodata, ov_SC02_041_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f5d0, data, tail3] + - [0x8f5d0, data, tail4] - [0x8f6c8, .rodata, ov_SC02_041_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f6dc, data, tail4] + - [0x8f6dc, data, tail5] - [0x8f884, .rodata, ov_SC02_041_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f9fc, data, tail5] + - [0x8f9fc, data, tail6] - [0x9157C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9157F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_001.yaml b/config/splat.ov_SC03_001.yaml index ceca63bbc..cb681318c 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -102,12 +102,14 @@ segments: - [0x650c8, data, tail] - [0xc3bf8, .rodata, ov_SC03_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3cc4, data, tail2] + - [0xc46b4, .rodata, ov_SC03_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc46d0, data, tail3] - [0xc46d4, .rodata, ov_SC03_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46f0, data, tail3] + - [0xc46f0, data, tail4] - [0xc47e8, .rodata, ov_SC03_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc47fc, data, tail4] + - [0xc47fc, data, tail5] - [0xc49a4, .rodata, ov_SC03_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4b1c, data, tail5] + - [0xc4b1c, data, tail6] - [0xC730C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC730F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_002.yaml b/config/splat.ov_SC03_002.yaml index 15f60effa..acca8e691 100644 --- a/config/splat.ov_SC03_002.yaml +++ b/config/splat.ov_SC03_002.yaml @@ -102,12 +102,14 @@ segments: - [0x5d358, data, tail] - [0xa1154, .rodata, ov_SC03_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1220, data, tail2] + - [0xa1c10, .rodata, ov_SC03_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1c2c, data, tail3] - [0xa1c30, .rodata, ov_SC03_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c4c, data, tail3] + - [0xa1c4c, data, tail4] - [0xa1d44, .rodata, ov_SC03_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1d58, data, tail4] + - [0xa1d58, data, tail5] - [0xa1f00, .rodata, ov_SC03_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2078, data, tail5] + - [0xa2078, data, tail6] - [0xA39F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA39F7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_003.yaml b/config/splat.ov_SC03_003.yaml index 71242a95a..6d63cbe65 100644 --- a/config/splat.ov_SC03_003.yaml +++ b/config/splat.ov_SC03_003.yaml @@ -102,12 +102,14 @@ segments: - [0x57120, data, tail] - [0x654d4, .rodata, ov_SC03_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x655a0, data, tail2] + - [0x65f90, .rodata, ov_SC03_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65fac, data, tail3] - [0x65fb0, .rodata, ov_SC03_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fcc, data, tail3] + - [0x65fcc, data, tail4] - [0x660c4, .rodata, ov_SC03_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660d8, data, tail4] + - [0x660d8, data, tail5] - [0x66280, .rodata, ov_SC03_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663f8, data, tail5] + - [0x663f8, data, tail6] - [0x67A24, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x67A25] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_006.yaml b/config/splat.ov_SC03_006.yaml index 308ac7e09..3c9e9be0f 100644 --- a/config/splat.ov_SC03_006.yaml +++ b/config/splat.ov_SC03_006.yaml @@ -102,12 +102,14 @@ segments: - [0x6443c, data, tail] - [0xccd90, .rodata, ov_SC03_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcce5c, data, tail2] + - [0xcd84c, .rodata, ov_SC03_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcd868, data, tail3] - [0xcd86c, .rodata, ov_SC03_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd888, data, tail3] + - [0xcd888, data, tail4] - [0xcd980, .rodata, ov_SC03_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd994, data, tail4] + - [0xcd994, data, tail5] - [0xcdb3c, .rodata, ov_SC03_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcdcb4, data, tail5] + - [0xcdcb4, data, tail6] - [0xCF75C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCF75F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_007.yaml b/config/splat.ov_SC03_007.yaml index 9d5dafc30..095192061 100644 --- a/config/splat.ov_SC03_007.yaml +++ b/config/splat.ov_SC03_007.yaml @@ -102,12 +102,14 @@ segments: - [0x5f234, data, tail] - [0xbf718, .rodata, ov_SC03_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbf7e4, data, tail2] + - [0xc01d4, .rodata, ov_SC03_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc01f0, data, tail3] - [0xc01f4, .rodata, ov_SC03_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0210, data, tail3] + - [0xc0210, data, tail4] - [0xc0308, .rodata, ov_SC03_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc031c, data, tail4] + - [0xc031c, data, tail5] - [0xc04c4, .rodata, ov_SC03_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc063c, data, tail5] + - [0xc063c, data, tail6] - [0xC316C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC316F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_010.yaml b/config/splat.ov_SC03_010.yaml index e2e8da635..280cd9960 100644 --- a/config/splat.ov_SC03_010.yaml +++ b/config/splat.ov_SC03_010.yaml @@ -102,12 +102,14 @@ segments: - [0x57d54, data, tail] - [0x759f4, .rodata, ov_SC03_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75ac0, data, tail2] + - [0x764b0, .rodata, ov_SC03_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x764cc, data, tail3] - [0x764d0, .rodata, ov_SC03_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764ec, data, tail3] + - [0x764ec, data, tail4] - [0x765e4, .rodata, ov_SC03_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x765f8, data, tail4] + - [0x765f8, data, tail5] - [0x767a0, .rodata, ov_SC03_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76918, data, tail5] + - [0x76918, data, tail6] - [0x78074, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78077] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_011.yaml b/config/splat.ov_SC03_011.yaml index 521e56174..4dd7c5e59 100644 --- a/config/splat.ov_SC03_011.yaml +++ b/config/splat.ov_SC03_011.yaml @@ -102,12 +102,14 @@ segments: - [0x590c4, data, tail] - [0x77c64, .rodata, ov_SC03_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77d30, data, tail2] + - [0x78720, .rodata, ov_SC03_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7873c, data, tail3] - [0x78740, .rodata, ov_SC03_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7875c, data, tail3] + - [0x7875c, data, tail4] - [0x78854, .rodata, ov_SC03_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78868, data, tail4] + - [0x78868, data, tail5] - [0x78a10, .rodata, ov_SC03_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b88, data, tail5] + - [0x78b88, data, tail6] - [0x7A2A8, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7A2AB] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_012.yaml b/config/splat.ov_SC03_012.yaml index 5851cc64a..c8cba305f 100644 --- a/config/splat.ov_SC03_012.yaml +++ b/config/splat.ov_SC03_012.yaml @@ -102,12 +102,14 @@ segments: - [0x55fa4, data, tail] - [0x6aac0, .rodata, ov_SC03_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab8c, data, tail2] + - [0x6b57c, .rodata, ov_SC03_012_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b598, data, tail3] - [0x6b59c, .rodata, ov_SC03_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b8, data, tail3] + - [0x6b5b8, data, tail4] - [0x6b6b0, .rodata, ov_SC03_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c4, data, tail4] + - [0x6b6c4, data, tail5] - [0x6b86c, .rodata, ov_SC03_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e4, data, tail5] + - [0x6b9e4, data, tail6] - [0x6D004, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6D007] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_013.yaml b/config/splat.ov_SC03_013.yaml index fe5d58365..babe8c376 100644 --- a/config/splat.ov_SC03_013.yaml +++ b/config/splat.ov_SC03_013.yaml @@ -102,12 +102,14 @@ segments: - [0x58d8c, data, tail] - [0x82d58, .rodata, ov_SC03_013] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82e24, data, tail2] + - [0x83814, .rodata, ov_SC03_013_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83830, data, tail3] - [0x83834, .rodata, ov_SC03_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83850, data, tail3] + - [0x83850, data, tail4] - [0x83948, .rodata, ov_SC03_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8395c, data, tail4] + - [0x8395c, data, tail5] - [0x83b04, .rodata, ov_SC03_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83c7c, data, tail5] + - [0x83c7c, data, tail6] - [0x853FC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x853FF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_014.yaml b/config/splat.ov_SC03_014.yaml index af7b7c075..2fe570ebe 100644 --- a/config/splat.ov_SC03_014.yaml +++ b/config/splat.ov_SC03_014.yaml @@ -102,12 +102,14 @@ segments: - [0x633c8, data, tail] - [0xc012c, .rodata, ov_SC03_014] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc01f8, data, tail2] + - [0xc0be8, .rodata, ov_SC03_014_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c04, data, tail3] - [0xc0c08, .rodata, ov_SC03_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail3] + - [0xc0c24, data, tail4] - [0xc0d1c, .rodata, ov_SC03_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail4] + - [0xc0d30, data, tail5] - [0xc0ed8, .rodata, ov_SC03_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail5] + - [0xc1050, data, tail6] - [0xC2EE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC2EE7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_015.yaml b/config/splat.ov_SC03_015.yaml index 4161a838e..49543102d 100644 --- a/config/splat.ov_SC03_015.yaml +++ b/config/splat.ov_SC03_015.yaml @@ -102,12 +102,14 @@ segments: - [0x633c8, data, tail] - [0xc012c, .rodata, ov_SC03_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc01f8, data, tail2] + - [0xc0be8, .rodata, ov_SC03_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c04, data, tail3] - [0xc0c08, .rodata, ov_SC03_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail3] + - [0xc0c24, data, tail4] - [0xc0d1c, .rodata, ov_SC03_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail4] + - [0xc0d30, data, tail5] - [0xc0ed8, .rodata, ov_SC03_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail5] + - [0xc1050, data, tail6] - [0xC2EE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC2EE7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_023.yaml b/config/splat.ov_SC03_023.yaml index 162d3d23d..b26447d5d 100644 --- a/config/splat.ov_SC03_023.yaml +++ b/config/splat.ov_SC03_023.yaml @@ -102,12 +102,14 @@ segments: - [0x56d44, data, tail] - [0x6e704, .rodata, ov_SC03_023] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e7d0, data, tail2] + - [0x6f1c0, .rodata, ov_SC03_023_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6f1dc, data, tail3] - [0x6f1e0, .rodata, ov_SC03_023_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1fc, data, tail3] + - [0x6f1fc, data, tail4] - [0x6f2f4, .rodata, ov_SC03_023_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f308, data, tail4] + - [0x6f308, data, tail5] - [0x6f4b0, .rodata, ov_SC03_023_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f628, data, tail5] + - [0x6f628, data, tail6] - [0x70C2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x70C2F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_024.yaml b/config/splat.ov_SC03_024.yaml index d6f7b6f63..5e6ffa280 100644 --- a/config/splat.ov_SC03_024.yaml +++ b/config/splat.ov_SC03_024.yaml @@ -102,12 +102,14 @@ segments: - [0x5ed68, data, tail] - [0x96b8c, .rodata, ov_SC03_024] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96c58, data, tail2] + - [0x97648, .rodata, ov_SC03_024_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97664, data, tail3] - [0x97668, .rodata, ov_SC03_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97684, data, tail3] + - [0x97684, data, tail4] - [0x9777c, .rodata, ov_SC03_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97790, data, tail4] + - [0x97790, data, tail5] - [0x97938, .rodata, ov_SC03_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97ab0, data, tail5] + - [0x97ab0, data, tail6] - [0x996F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x996F7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_028.yaml b/config/splat.ov_SC03_028.yaml index eacb5a626..e229c08f5 100644 --- a/config/splat.ov_SC03_028.yaml +++ b/config/splat.ov_SC03_028.yaml @@ -102,12 +102,14 @@ segments: - [0x63834, data, tail] - [0xc0d14, .rodata, ov_SC03_028] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0de0, data, tail2] + - [0xc17d0, .rodata, ov_SC03_028_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc17ec, data, tail3] - [0xc17f0, .rodata, ov_SC03_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc180c, data, tail3] + - [0xc180c, data, tail4] - [0xc1904, .rodata, ov_SC03_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1918, data, tail4] + - [0xc1918, data, tail5] - [0xc1ac0, .rodata, ov_SC03_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1c38, data, tail5] + - [0xc1c38, data, tail6] - [0xC44AC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC44AF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_029.yaml b/config/splat.ov_SC03_029.yaml index 49f136153..7477ecf73 100644 --- a/config/splat.ov_SC03_029.yaml +++ b/config/splat.ov_SC03_029.yaml @@ -102,12 +102,14 @@ segments: - [0x5f66c, data, tail] - [0xaee48, .rodata, ov_SC03_029] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaef14, data, tail2] + - [0xaf904, .rodata, ov_SC03_029_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaf920, data, tail3] - [0xaf924, .rodata, ov_SC03_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf940, data, tail3] + - [0xaf940, data, tail4] - [0xafa38, .rodata, ov_SC03_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafa4c, data, tail4] + - [0xafa4c, data, tail5] - [0xafbf4, .rodata, ov_SC03_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafd6c, data, tail5] + - [0xafd6c, data, tail6] - [0xB18EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB18EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_030.yaml b/config/splat.ov_SC03_030.yaml index a852461b7..67705047b 100644 --- a/config/splat.ov_SC03_030.yaml +++ b/config/splat.ov_SC03_030.yaml @@ -102,12 +102,14 @@ segments: - [0x59ca8, data, tail] - [0xb74ec, .rodata, ov_SC03_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb75b8, data, tail2] + - [0xb7fa8, .rodata, ov_SC03_030_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7fc4, data, tail3] - [0xb7fc8, .rodata, ov_SC03_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fe4, data, tail3] + - [0xb7fe4, data, tail4] - [0xb80dc, .rodata, ov_SC03_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb80f0, data, tail4] + - [0xb80f0, data, tail5] - [0xb8298, .rodata, ov_SC03_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8410, data, tail5] + - [0xb8410, data, tail6] - [0xB9AF0] # 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 # ` - [0x, bin, trailing]` (the final 1-3 bytes spimdisasm's data path drops); diff --git a/config/splat.ov_SC03_031.yaml b/config/splat.ov_SC03_031.yaml index 52324a360..2615d2f7c 100644 --- a/config/splat.ov_SC03_031.yaml +++ b/config/splat.ov_SC03_031.yaml @@ -102,12 +102,14 @@ segments: - [0x5a1c4, data, tail] - [0x9b990, .rodata, ov_SC03_031] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ba5c, data, tail2] + - [0x9c44c, .rodata, ov_SC03_031_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c468, data, tail3] - [0x9c46c, .rodata, ov_SC03_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c488, data, tail3] + - [0x9c488, data, tail4] - [0x9c580, .rodata, ov_SC03_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c594, data, tail4] + - [0x9c594, data, tail5] - [0x9c73c, .rodata, ov_SC03_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c8b4, data, tail5] + - [0x9c8b4, data, tail6] - [0x9E14C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9E14F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_089.yaml b/config/splat.ov_SC03_089.yaml index 0b787ae31..8bda8cbd1 100644 --- a/config/splat.ov_SC03_089.yaml +++ b/config/splat.ov_SC03_089.yaml @@ -102,12 +102,14 @@ segments: - [0x614c0, data, tail] - [0x9c1fc, .rodata, ov_SC03_089] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c2c8, data, tail2] + - [0x9ccb8, .rodata, ov_SC03_089_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ccd4, data, tail3] - [0x9ccd8, .rodata, ov_SC03_089_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccf4, data, tail3] + - [0x9ccf4, data, tail4] - [0x9cdec, .rodata, ov_SC03_089_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ce00, data, tail4] + - [0x9ce00, data, tail5] - [0x9cfa8, .rodata, ov_SC03_089_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d120, data, tail5] + - [0x9d120, data, tail6] - [0x9E7C4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9E7C7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_090.yaml b/config/splat.ov_SC03_090.yaml index bed06e27b..2469dbf45 100644 --- a/config/splat.ov_SC03_090.yaml +++ b/config/splat.ov_SC03_090.yaml @@ -102,12 +102,14 @@ segments: - [0x638e4, data, tail] - [0xa1668, .rodata, ov_SC03_090] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1734, data, tail2] + - [0xa2124, .rodata, ov_SC03_090_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2140, data, tail3] - [0xa2144, .rodata, ov_SC03_090_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2160, data, tail3] + - [0xa2160, data, tail4] - [0xa2258, .rodata, ov_SC03_090_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa226c, data, tail4] + - [0xa226c, data, tail5] - [0xa2414, .rodata, ov_SC03_090_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa258c, data, tail5] + - [0xa258c, data, tail6] - [0xA3C34, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA3C37] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_091.yaml b/config/splat.ov_SC03_091.yaml index 0846f0c51..22b1d8ba3 100644 --- a/config/splat.ov_SC03_091.yaml +++ b/config/splat.ov_SC03_091.yaml @@ -103,12 +103,14 @@ segments: - [0x6478c, data, tail] - [0xa7d34, .rodata, ov_SC03_091] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa7e00, data, tail2] + - [0xa87f0, .rodata, ov_SC03_091_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa880c, data, tail3] - [0xa8810, .rodata, ov_SC03_091_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa882c, data, tail3] + - [0xa882c, data, tail4] - [0xa8924, .rodata, ov_SC03_091_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8938, data, tail4] + - [0xa8938, data, tail5] - [0xa8ae0, .rodata, ov_SC03_091_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8c58, data, tail5] + - [0xa8c58, data, tail6] - [0xAA584, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAA587] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_092.yaml b/config/splat.ov_SC03_092.yaml index 3d5d6af07..d7405d65f 100644 --- a/config/splat.ov_SC03_092.yaml +++ b/config/splat.ov_SC03_092.yaml @@ -102,12 +102,14 @@ segments: - [0x5cb5c, data, tail] - [0x8890c, .rodata, ov_SC03_092] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x889d8, data, tail2] + - [0x893c8, .rodata, ov_SC03_092_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x893e4, data, tail3] - [0x893e8, .rodata, ov_SC03_092_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89404, data, tail3] + - [0x89404, data, tail4] - [0x894fc, .rodata, ov_SC03_092_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89510, data, tail4] + - [0x89510, data, tail5] - [0x896b8, .rodata, ov_SC03_092_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89830, data, tail5] + - [0x89830, data, tail6] - [0x8AF2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8AF2F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_093.yaml b/config/splat.ov_SC03_093.yaml index 98f7b1d0c..5b4a4161b 100644 --- a/config/splat.ov_SC03_093.yaml +++ b/config/splat.ov_SC03_093.yaml @@ -102,12 +102,14 @@ segments: - [0x5dd34, data, tail] - [0xa1d60, .rodata, ov_SC03_093] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1e2c, data, tail2] + - [0xa281c, .rodata, ov_SC03_093_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2838, data, tail3] - [0xa283c, .rodata, ov_SC03_093_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2858, data, tail3] + - [0xa2858, data, tail4] - [0xa2950, .rodata, ov_SC03_093_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2964, data, tail4] + - [0xa2964, data, tail5] - [0xa2b0c, .rodata, ov_SC03_093_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2c84, data, tail5] + - [0xa2c84, data, tail6] - [0xA4584, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA4587] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_094.yaml b/config/splat.ov_SC03_094.yaml index 9f2a95303..485c91477 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -102,12 +102,14 @@ segments: - [0x5f730, data, tail] - [0xa8b9c, .rodata, ov_SC03_094] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8c68, data, tail2] + - [0xa9658, .rodata, ov_SC03_094_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9674, data, tail3] - [0xa9678, .rodata, ov_SC03_094_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9694, data, tail3] + - [0xa9694, data, tail4] - [0xa978c, .rodata, ov_SC03_094_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97a0, data, tail4] + - [0xa97a0, data, tail5] - [0xa9948, .rodata, ov_SC03_094_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9ac0, data, tail5] + - [0xa9ac0, data, tail6] - [0xAB13C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAB13F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_095.yaml b/config/splat.ov_SC03_095.yaml index dd64af5d0..7ff844488 100644 --- a/config/splat.ov_SC03_095.yaml +++ b/config/splat.ov_SC03_095.yaml @@ -102,12 +102,14 @@ segments: - [0x58d90, data, tail] - [0x717c8, .rodata, ov_SC03_095] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71894, data, tail2] + - [0x72284, .rodata, ov_SC03_095_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x722a0, data, tail3] - [0x722a4, .rodata, ov_SC03_095_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722c0, data, tail3] + - [0x722c0, data, tail4] - [0x723b8, .rodata, ov_SC03_095_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723cc, data, tail4] + - [0x723cc, data, tail5] - [0x72574, .rodata, ov_SC03_095_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x726ec, data, tail5] + - [0x726ec, data, tail6] - [0x73D3C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73D3F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_096.yaml b/config/splat.ov_SC03_096.yaml index 7ccc743f4..e1973d470 100644 --- a/config/splat.ov_SC03_096.yaml +++ b/config/splat.ov_SC03_096.yaml @@ -102,12 +102,14 @@ segments: - [0x58910, data, tail] - [0x7027c, .rodata, ov_SC03_096] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70348, data, tail2] + - [0x70d38, .rodata, ov_SC03_096_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70d54, data, tail3] - [0x70d58, .rodata, ov_SC03_096_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d74, data, tail3] + - [0x70d74, data, tail4] - [0x70e6c, .rodata, ov_SC03_096_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e80, data, tail4] + - [0x70e80, data, tail5] - [0x71028, .rodata, ov_SC03_096_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711a0, data, tail5] + - [0x711a0, data, tail6] - [0x727F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x727F7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_097.yaml b/config/splat.ov_SC03_097.yaml index 93d79496f..b334363dd 100644 --- a/config/splat.ov_SC03_097.yaml +++ b/config/splat.ov_SC03_097.yaml @@ -102,12 +102,14 @@ segments: - [0x5dcf0, data, tail] - [0x802ec, .rodata, ov_SC03_097] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x803b8, data, tail2] + - [0x80da8, .rodata, ov_SC03_097_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80dc4, data, tail3] - [0x80dc8, .rodata, ov_SC03_097_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80de4, data, tail3] + - [0x80de4, data, tail4] - [0x80edc, .rodata, ov_SC03_097_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80ef0, data, tail4] + - [0x80ef0, data, tail5] - [0x81098, .rodata, ov_SC03_097_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81210, data, tail5] + - [0x81210, data, tail6] - [0x82D74, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82D77] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_098.yaml b/config/splat.ov_SC03_098.yaml index b025d20be..58eb4ca9b 100644 --- a/config/splat.ov_SC03_098.yaml +++ b/config/splat.ov_SC03_098.yaml @@ -102,12 +102,14 @@ segments: - [0x5d17c, data, tail] - [0x9af70, .rodata, ov_SC03_098] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b03c, data, tail2] + - [0x9ba2c, .rodata, ov_SC03_098_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ba48, data, tail3] - [0x9ba4c, .rodata, ov_SC03_098_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba68, data, tail3] + - [0x9ba68, data, tail4] - [0x9bb60, .rodata, ov_SC03_098_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bb74, data, tail4] + - [0x9bb74, data, tail5] - [0x9bd1c, .rodata, ov_SC03_098_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9be94, data, tail5] + - [0x9be94, data, tail6] - [0x9D75C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9D75F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_099.yaml b/config/splat.ov_SC03_099.yaml index b13c5145b..860804d1e 100644 --- a/config/splat.ov_SC03_099.yaml +++ b/config/splat.ov_SC03_099.yaml @@ -102,12 +102,14 @@ segments: - [0x5b27c, data, tail] - [0x94c44, .rodata, ov_SC03_099] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94d10, data, tail2] + - [0x95700, .rodata, ov_SC03_099_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9571c, data, tail3] - [0x95720, .rodata, ov_SC03_099_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9573c, data, tail3] + - [0x9573c, data, tail4] - [0x95834, .rodata, ov_SC03_099_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95848, data, tail4] + - [0x95848, data, tail5] - [0x959f0, .rodata, ov_SC03_099_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95b68, data, tail5] + - [0x95b68, data, tail6] - [0x97304, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x97307] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_100.yaml b/config/splat.ov_SC03_100.yaml index 18f10664a..8e6f9891f 100644 --- a/config/splat.ov_SC03_100.yaml +++ b/config/splat.ov_SC03_100.yaml @@ -102,12 +102,14 @@ segments: - [0x5c748, data, tail] - [0x9dec8, .rodata, ov_SC03_100] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9df94, data, tail2] + - [0x9e984, .rodata, ov_SC03_100_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9e9a0, data, tail3] - [0x9e9a4, .rodata, ov_SC03_100_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e9c0, data, tail3] + - [0x9e9c0, data, tail4] - [0x9eab8, .rodata, ov_SC03_100_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eacc, data, tail4] + - [0x9eacc, data, tail5] - [0x9ec74, .rodata, ov_SC03_100_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9edec, data, tail5] + - [0x9edec, data, tail6] - [0xA080C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA080F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_101.yaml b/config/splat.ov_SC03_101.yaml index 0d54d8f4a..2875ffbc1 100644 --- a/config/splat.ov_SC03_101.yaml +++ b/config/splat.ov_SC03_101.yaml @@ -102,12 +102,14 @@ segments: - [0x5b724, data, tail] - [0x73790, .rodata, ov_SC03_101] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7385c, data, tail2] + - [0x7424c, .rodata, ov_SC03_101_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74268, data, tail3] - [0x7426c, .rodata, ov_SC03_101_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74288, data, tail3] + - [0x74288, data, tail4] - [0x74380, .rodata, ov_SC03_101_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74394, data, tail4] + - [0x74394, data, tail5] - [0x7453c, .rodata, ov_SC03_101_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x746b4, data, tail5] + - [0x746b4, data, tail6] - [0x760CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x760CF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_102.yaml b/config/splat.ov_SC03_102.yaml index 01c48f01c..38f1355a3 100644 --- a/config/splat.ov_SC03_102.yaml +++ b/config/splat.ov_SC03_102.yaml @@ -102,12 +102,14 @@ segments: - [0x5dfdc, data, tail] - [0x8f40c, .rodata, ov_SC03_102] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f4d8, data, tail2] + - [0x8fec8, .rodata, ov_SC03_102_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fee4, data, tail3] - [0x8fee8, .rodata, ov_SC03_102_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff04, data, tail3] + - [0x8ff04, data, tail4] - [0x8fffc, .rodata, ov_SC03_102_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90010, data, tail4] + - [0x90010, data, tail5] - [0x901b8, .rodata, ov_SC03_102_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90330, data, tail5] + - [0x90330, data, tail6] - [0x91ACC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91ACF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_103.yaml b/config/splat.ov_SC03_103.yaml index 0162e9498..84d6aade3 100644 --- a/config/splat.ov_SC03_103.yaml +++ b/config/splat.ov_SC03_103.yaml @@ -102,12 +102,14 @@ segments: - [0x5bf8c, data, tail] - [0x9a5c0, .rodata, ov_SC03_103] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a68c, data, tail2] + - [0x9b07c, .rodata, ov_SC03_103_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b098, data, tail3] - [0x9b09c, .rodata, ov_SC03_103_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b0b8, data, tail3] + - [0x9b0b8, data, tail4] - [0x9b1b0, .rodata, ov_SC03_103_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b1c4, data, tail4] + - [0x9b1c4, data, tail5] - [0x9b36c, .rodata, ov_SC03_103_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b4e4, data, tail5] + - [0x9b4e4, data, tail6] - [0x9CC7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9CC7F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_104.yaml b/config/splat.ov_SC03_104.yaml index 13156a0b3..dd72e761d 100644 --- a/config/splat.ov_SC03_104.yaml +++ b/config/splat.ov_SC03_104.yaml @@ -102,12 +102,14 @@ segments: - [0x62b1c, data, tail] - [0x95b20, .rodata, ov_SC03_104] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95bec, data, tail2] + - [0x965dc, .rodata, ov_SC03_104_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x965f8, data, tail3] - [0x965fc, .rodata, ov_SC03_104_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96618, data, tail3] + - [0x96618, data, tail4] - [0x96710, .rodata, ov_SC03_104_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96724, data, tail4] + - [0x96724, data, tail5] - [0x968cc, .rodata, ov_SC03_104_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96a44, data, tail5] + - [0x96a44, data, tail6] - [0x9833C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9833F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_105.yaml b/config/splat.ov_SC03_105.yaml index f396eff50..e9538eca8 100644 --- a/config/splat.ov_SC03_105.yaml +++ b/config/splat.ov_SC03_105.yaml @@ -102,12 +102,14 @@ segments: - [0x621a4, data, tail] - [0x8ee18, .rodata, ov_SC03_105] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8eee4, data, tail2] + - [0x8f8d4, .rodata, ov_SC03_105_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f8f0, data, tail3] - [0x8f8f4, .rodata, ov_SC03_105_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f910, data, tail3] + - [0x8f910, data, tail4] - [0x8fa08, .rodata, ov_SC03_105_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fa1c, data, tail4] + - [0x8fa1c, data, tail5] - [0x8fbc4, .rodata, ov_SC03_105_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fd3c, data, tail5] + - [0x8fd3c, data, tail6] - [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 diff --git a/config/splat.ov_SC03_108.yaml b/config/splat.ov_SC03_108.yaml index 98ceea828..c3d320552 100644 --- a/config/splat.ov_SC03_108.yaml +++ b/config/splat.ov_SC03_108.yaml @@ -102,12 +102,14 @@ segments: - [0x58afc, data, tail] - [0x77320, .rodata, ov_SC03_108] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x773ec, data, tail2] + - [0x77ddc, .rodata, ov_SC03_108_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77df8, data, tail3] - [0x77dfc, .rodata, ov_SC03_108_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e18, data, tail3] + - [0x77e18, data, tail4] - [0x77f10, .rodata, ov_SC03_108_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77f24, data, tail4] + - [0x77f24, data, tail5] - [0x780cc, .rodata, ov_SC03_108_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78244, data, tail5] + - [0x78244, data, tail6] - [0x7994C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7994F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_109.yaml b/config/splat.ov_SC03_109.yaml index 20f6e567c..ccc26a8ef 100644 --- a/config/splat.ov_SC03_109.yaml +++ b/config/splat.ov_SC03_109.yaml @@ -102,12 +102,14 @@ segments: - [0x561a8, data, tail] - [0x6fe30, .rodata, ov_SC03_109] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6fefc, data, tail2] + - [0x708ec, .rodata, ov_SC03_109_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70908, data, tail3] - [0x7090c, .rodata, ov_SC03_109_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70928, data, tail3] + - [0x70928, data, tail4] - [0x70a20, .rodata, ov_SC03_109_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70a34, data, tail4] + - [0x70a34, data, tail5] - [0x70bdc, .rodata, ov_SC03_109_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail5] + - [0x70d54, data, tail6] - [0x72354, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72357] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_110.yaml b/config/splat.ov_SC03_110.yaml index d722fba4e..2f3206072 100644 --- a/config/splat.ov_SC03_110.yaml +++ b/config/splat.ov_SC03_110.yaml @@ -102,12 +102,14 @@ segments: - [0x59bc8, data, tail] - [0x77acc, .rodata, ov_SC03_110] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77b98, data, tail2] + - [0x78588, .rodata, ov_SC03_110_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x785a4, data, tail3] - [0x785a8, .rodata, ov_SC03_110_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x785c4, data, tail3] + - [0x785c4, data, tail4] - [0x786bc, .rodata, ov_SC03_110_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x786d0, data, tail4] + - [0x786d0, data, tail5] - [0x78878, .rodata, ov_SC03_110_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x789f0, data, tail5] + - [0x789f0, data, tail6] - [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 diff --git a/config/splat.ov_SC03_111.yaml b/config/splat.ov_SC03_111.yaml index 31a99c66f..9a69646e5 100644 --- a/config/splat.ov_SC03_111.yaml +++ b/config/splat.ov_SC03_111.yaml @@ -102,12 +102,14 @@ segments: - [0x5c77c, data, tail] - [0x8f04c, .rodata, ov_SC03_111] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f118, data, tail2] + - [0x8fb08, .rodata, ov_SC03_111_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fb24, data, tail3] - [0x8fb28, .rodata, ov_SC03_111_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb44, data, tail3] + - [0x8fb44, data, tail4] - [0x8fc3c, .rodata, ov_SC03_111_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fc50, data, tail4] + - [0x8fc50, data, tail5] - [0x8fdf8, .rodata, ov_SC03_111_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff70, data, tail5] + - [0x8ff70, data, tail6] - [0x91A2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91A2F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_112.yaml b/config/splat.ov_SC03_112.yaml index 1038496e8..fd6e2bb4b 100644 --- a/config/splat.ov_SC03_112.yaml +++ b/config/splat.ov_SC03_112.yaml @@ -102,12 +102,14 @@ segments: - [0x5d584, data, tail] - [0x827b4, .rodata, ov_SC03_112] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82880, data, tail2] + - [0x83270, .rodata, ov_SC03_112_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8328c, data, tail3] - [0x83290, .rodata, ov_SC03_112_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x832ac, data, tail3] + - [0x832ac, data, tail4] - [0x833a4, .rodata, ov_SC03_112_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x833b8, data, tail4] + - [0x833b8, data, tail5] - [0x83560, .rodata, ov_SC03_112_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x836d8, data, tail5] + - [0x836d8, data, tail6] - [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 diff --git a/config/splat.ov_SC03_113.yaml b/config/splat.ov_SC03_113.yaml index 179fb69ea..0f5744c2a 100644 --- a/config/splat.ov_SC03_113.yaml +++ b/config/splat.ov_SC03_113.yaml @@ -102,12 +102,14 @@ segments: - [0x5ac34, data, tail] - [0x7b43c, .rodata, ov_SC03_113] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7b508, data, tail2] + - [0x7bef8, .rodata, ov_SC03_113_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bf14, data, tail3] - [0x7bf18, .rodata, ov_SC03_113_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf34, data, tail3] + - [0x7bf34, data, tail4] - [0x7c02c, .rodata, ov_SC03_113_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c040, data, tail4] + - [0x7c040, data, tail5] - [0x7c1e8, .rodata, ov_SC03_113_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c360, data, tail5] + - [0x7c360, data, tail6] - [0x7DB94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7DB97] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_114.yaml b/config/splat.ov_SC03_114.yaml index de7a3a221..ce542698f 100644 --- a/config/splat.ov_SC03_114.yaml +++ b/config/splat.ov_SC03_114.yaml @@ -102,12 +102,14 @@ segments: - [0x5689c, data, tail] - [0x7f148, .rodata, ov_SC03_114] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f214, data, tail2] + - [0x7fc04, .rodata, ov_SC03_114_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fc20, data, tail3] - [0x7fc24, .rodata, ov_SC03_114_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc40, data, tail3] + - [0x7fc40, data, tail4] - [0x7fd38, .rodata, ov_SC03_114_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fd4c, data, tail4] + - [0x7fd4c, data, tail5] - [0x7fef4, .rodata, ov_SC03_114_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8006c, data, tail5] + - [0x8006c, data, tail6] - [0x8170C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8170F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_115.yaml b/config/splat.ov_SC03_115.yaml index 99212de90..9cfd7242b 100644 --- a/config/splat.ov_SC03_115.yaml +++ b/config/splat.ov_SC03_115.yaml @@ -102,12 +102,14 @@ segments: - [0x58308, data, tail] - [0x6aabc, .rodata, ov_SC03_115] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab88, data, tail2] + - [0x6b578, .rodata, ov_SC03_115_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b594, data, tail3] - [0x6b598, .rodata, ov_SC03_115_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b4, data, tail3] + - [0x6b5b4, data, tail4] - [0x6b6ac, .rodata, ov_SC03_115_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c0, data, tail4] + - [0x6b6c0, data, tail5] - [0x6b868, .rodata, ov_SC03_115_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e0, data, tail5] + - [0x6b9e0, data, tail6] - [0x6CFE4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6CFE7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_116.yaml b/config/splat.ov_SC03_116.yaml index 2864ea992..70d6d37ae 100644 --- a/config/splat.ov_SC03_116.yaml +++ b/config/splat.ov_SC03_116.yaml @@ -102,12 +102,14 @@ segments: - [0x5a70c, data, tail] - [0x6d658, .rodata, ov_SC03_116] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6d724, data, tail2] + - [0x6e114, .rodata, ov_SC03_116_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e130, data, tail3] - [0x6e134, .rodata, ov_SC03_116_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e150, data, tail3] + - [0x6e150, data, tail4] - [0x6e248, .rodata, ov_SC03_116_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e25c, data, tail4] + - [0x6e25c, data, tail5] - [0x6e404, .rodata, ov_SC03_116_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e57c, data, tail5] + - [0x6e57c, data, tail6] - [0x6FBF4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6FBF7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_117.yaml b/config/splat.ov_SC03_117.yaml index 5051a2840..035e4ea70 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -102,12 +102,14 @@ segments: - [0x5c718, data, tail] - [0xa3cf8, .rodata, ov_SC03_117] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3dc4, data, tail2] + - [0xa47b4, .rodata, ov_SC03_117_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa47d0, data, tail3] - [0xa47d4, .rodata, ov_SC03_117_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47f0, data, tail3] + - [0xa47f0, data, tail4] - [0xa48e8, .rodata, ov_SC03_117_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa48fc, data, tail4] + - [0xa48fc, data, tail5] - [0xa4aa4, .rodata, ov_SC03_117_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4c1c, data, tail5] + - [0xa4c1c, data, tail6] - [0xA67EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA67EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_118.yaml b/config/splat.ov_SC03_118.yaml index 81d29507d..510d6d90a 100644 --- a/config/splat.ov_SC03_118.yaml +++ b/config/splat.ov_SC03_118.yaml @@ -102,12 +102,14 @@ segments: - [0x617c4, data, tail] - [0xa9c54, .rodata, ov_SC03_118] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9d20, data, tail2] + - [0xaa710, .rodata, ov_SC03_118_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa72c, data, tail3] - [0xaa730, .rodata, ov_SC03_118_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail3] + - [0xaa74c, data, tail4] - [0xaa844, .rodata, ov_SC03_118_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail4] + - [0xaa858, data, tail5] - [0xaaa00, .rodata, ov_SC03_118_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail5] + - [0xaab78, data, tail6] - [0xAC6F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAC6F7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_119.yaml b/config/splat.ov_SC03_119.yaml index fcb2c4b17..ac546281d 100644 --- a/config/splat.ov_SC03_119.yaml +++ b/config/splat.ov_SC03_119.yaml @@ -102,12 +102,14 @@ segments: - [0x617c4, data, tail] - [0xa9c54, .rodata, ov_SC03_119] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9d20, data, tail2] + - [0xaa710, .rodata, ov_SC03_119_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa72c, data, tail3] - [0xaa730, .rodata, ov_SC03_119_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail3] + - [0xaa74c, data, tail4] - [0xaa844, .rodata, ov_SC03_119_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail4] + - [0xaa858, data, tail5] - [0xaaa00, .rodata, ov_SC03_119_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail5] + - [0xaab78, data, tail6] - [0xAC6F4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xAC6F7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_121.yaml b/config/splat.ov_SC03_121.yaml index e7870af44..a271738ae 100644 --- a/config/splat.ov_SC03_121.yaml +++ b/config/splat.ov_SC03_121.yaml @@ -102,12 +102,14 @@ segments: - [0x59fe0, data, tail] - [0x8475c, .rodata, ov_SC03_121] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84828, data, tail2] + - [0x85218, .rodata, ov_SC03_121_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85234, data, tail3] - [0x85238, .rodata, ov_SC03_121_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85254, data, tail3] + - [0x85254, data, tail4] - [0x8534c, .rodata, ov_SC03_121_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85360, data, tail4] + - [0x85360, data, tail5] - [0x85508, .rodata, ov_SC03_121_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85680, data, tail5] + - [0x85680, data, tail6] - [0x86E54, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x86E57] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_124.yaml b/config/splat.ov_SC03_124.yaml index b16319d40..a97cf34ae 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -102,12 +102,14 @@ segments: - [0x6276c, data, tail] - [0xb6eb0, .rodata, ov_SC03_124] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb6f7c, data, tail2] + - [0xb796c, .rodata, ov_SC03_124_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7988, data, tail3] - [0xb798c, .rodata, ov_SC03_124_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb79a8, data, tail3] + - [0xb79a8, data, tail4] - [0xb7aa0, .rodata, ov_SC03_124_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ab4, data, tail4] + - [0xb7ab4, data, tail5] - [0xb7c5c, .rodata, ov_SC03_124_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7dd4, data, tail5] + - [0xb7dd4, data, tail6] - [0xBA48C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBA48F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_125.yaml b/config/splat.ov_SC03_125.yaml index ae9af3f67..8823b4cdf 100644 --- a/config/splat.ov_SC03_125.yaml +++ b/config/splat.ov_SC03_125.yaml @@ -102,12 +102,14 @@ segments: - [0x5bbdc, data, tail] - [0x99b9c, .rodata, ov_SC03_125] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x99c68, data, tail2] + - [0x9a658, .rodata, ov_SC03_125_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9a674, data, tail3] - [0x9a678, .rodata, ov_SC03_125_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a694, data, tail3] + - [0x9a694, data, tail4] - [0x9a78c, .rodata, ov_SC03_125_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a7a0, data, tail4] + - [0x9a7a0, data, tail5] - [0x9a948, .rodata, ov_SC03_125_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9aac0, data, tail5] + - [0x9aac0, data, tail6] - [0x9C3E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9C3E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC03_126.yaml b/config/splat.ov_SC03_126.yaml index 482bdd56c..1b2497f9c 100644 --- a/config/splat.ov_SC03_126.yaml +++ b/config/splat.ov_SC03_126.yaml @@ -102,12 +102,14 @@ segments: - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC03_126] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] + - [0x65f44, .rodata, ov_SC03_126_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail3] - [0x65f64, .rodata, ov_SC03_126_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail3] + - [0x65f80, data, tail4] - [0x66078, .rodata, ov_SC03_126_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail4] + - [0x6608c, data, tail5] - [0x66234, .rodata, ov_SC03_126_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail5] + - [0x663ac, data, tail6] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_000.yaml b/config/splat.ov_SC04_000.yaml index 3e9e30e87..ffd3c42c8 100644 --- a/config/splat.ov_SC04_000.yaml +++ b/config/splat.ov_SC04_000.yaml @@ -102,12 +102,14 @@ segments: - [0x5b0e0, data, tail] - [0x7f504, .rodata, ov_SC04_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f5d0, data, tail2] + - [0x7ffc0, .rodata, ov_SC04_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7ffdc, data, tail3] - [0x7ffe0, .rodata, ov_SC04_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fffc, data, tail3] + - [0x7fffc, data, tail4] - [0x800f4, .rodata, ov_SC04_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80108, data, tail4] + - [0x80108, data, tail5] - [0x802b0, .rodata, ov_SC04_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80428, data, tail5] + - [0x80428, data, tail6] - [0x82EFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82EFF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_002.yaml b/config/splat.ov_SC04_002.yaml index c6ec9da18..b92b85745 100644 --- a/config/splat.ov_SC04_002.yaml +++ b/config/splat.ov_SC04_002.yaml @@ -102,12 +102,14 @@ segments: - [0x6024c, data, tail] - [0x96854, .rodata, ov_SC04_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96920, data, tail2] + - [0x97310, .rodata, ov_SC04_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9732c, data, tail3] - [0x97330, .rodata, ov_SC04_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9734c, data, tail3] + - [0x9734c, data, tail4] - [0x97444, .rodata, ov_SC04_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97458, data, tail4] + - [0x97458, data, tail5] - [0x97600, .rodata, ov_SC04_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97778, data, tail5] + - [0x97778, data, tail6] - [0x995DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x995DF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_003.yaml b/config/splat.ov_SC04_003.yaml index 79fa87ed3..dd7ca736f 100644 --- a/config/splat.ov_SC04_003.yaml +++ b/config/splat.ov_SC04_003.yaml @@ -102,12 +102,14 @@ segments: - [0x59fe8, data, tail] - [0x714d0, .rodata, ov_SC04_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7159c, data, tail2] + - [0x71f8c, .rodata, ov_SC04_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71fa8, data, tail3] - [0x71fac, .rodata, ov_SC04_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71fc8, data, tail3] + - [0x71fc8, data, tail4] - [0x720c0, .rodata, ov_SC04_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720d4, data, tail4] + - [0x720d4, data, tail5] - [0x7227c, .rodata, ov_SC04_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723f4, data, tail5] + - [0x723f4, data, tail6] - [0x73A94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x73A97] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_004.yaml b/config/splat.ov_SC04_004.yaml index 0b6c2527c..806bee028 100644 --- a/config/splat.ov_SC04_004.yaml +++ b/config/splat.ov_SC04_004.yaml @@ -102,12 +102,14 @@ segments: - [0x5c51c, data, tail] - [0x892cc, .rodata, ov_SC04_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89398, data, tail2] + - [0x89d88, .rodata, ov_SC04_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89da4, data, tail3] - [0x89da8, .rodata, ov_SC04_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89dc4, data, tail3] + - [0x89dc4, data, tail4] - [0x89ebc, .rodata, ov_SC04_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89ed0, data, tail4] + - [0x89ed0, data, tail5] - [0x8a078, .rodata, ov_SC04_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a1f0, data, tail5] + - [0x8a1f0, data, tail6] - [0x8BAFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8BAFF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_005.yaml b/config/splat.ov_SC04_005.yaml index 7f4f2ab5e..137c13d45 100644 --- a/config/splat.ov_SC04_005.yaml +++ b/config/splat.ov_SC04_005.yaml @@ -102,12 +102,14 @@ segments: - [0x5f950, data, tail] - [0x97490, .rodata, ov_SC04_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9755c, data, tail2] + - [0x97f4c, .rodata, ov_SC04_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97f68, data, tail3] - [0x97f6c, .rodata, ov_SC04_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f88, data, tail3] + - [0x97f88, data, tail4] - [0x98080, .rodata, ov_SC04_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98094, data, tail4] + - [0x98094, data, tail5] - [0x9823c, .rodata, ov_SC04_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x983b4, data, tail5] + - [0x983b4, data, tail6] - [0x9A1D4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9A1D7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_006.yaml b/config/splat.ov_SC04_006.yaml index 30e580409..518eed51a 100644 --- a/config/splat.ov_SC04_006.yaml +++ b/config/splat.ov_SC04_006.yaml @@ -102,12 +102,14 @@ segments: - [0x57a30, data, tail] - [0x73738, .rodata, ov_SC04_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73804, data, tail2] + - [0x741f4, .rodata, ov_SC04_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74210, data, tail3] - [0x74214, .rodata, ov_SC04_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74230, data, tail3] + - [0x74230, data, tail4] - [0x74328, .rodata, ov_SC04_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7433c, data, tail4] + - [0x7433c, data, tail5] - [0x744e4, .rodata, ov_SC04_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7465c, data, tail5] + - [0x7465c, data, tail6] - [0x75C74, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x75C77] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_007.yaml b/config/splat.ov_SC04_007.yaml index 63f1b9f26..642d6948f 100644 --- a/config/splat.ov_SC04_007.yaml +++ b/config/splat.ov_SC04_007.yaml @@ -102,12 +102,14 @@ segments: - [0x5d9e8, data, tail] - [0x8acf4, .rodata, ov_SC04_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8adc0, data, tail2] + - [0x8b7b0, .rodata, ov_SC04_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8b7cc, data, tail3] - [0x8b7d0, .rodata, ov_SC04_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7ec, data, tail3] + - [0x8b7ec, data, tail4] - [0x8b8e4, .rodata, ov_SC04_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b8f8, data, tail4] + - [0x8b8f8, data, tail5] - [0x8baa0, .rodata, ov_SC04_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bc18, data, tail5] + - [0x8bc18, data, tail6] - [0x8DA34, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8DA37] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_009.yaml b/config/splat.ov_SC04_009.yaml index 520955af2..b97b54e59 100644 --- a/config/splat.ov_SC04_009.yaml +++ b/config/splat.ov_SC04_009.yaml @@ -102,12 +102,14 @@ segments: - [0x5694c, data, tail] - [0x6dbf0, .rodata, ov_SC04_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6dcbc, data, tail2] + - [0x6e6ac, .rodata, ov_SC04_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e6c8, data, tail3] - [0x6e6cc, .rodata, ov_SC04_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6e8, data, tail3] + - [0x6e6e8, data, tail4] - [0x6e7e0, .rodata, ov_SC04_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e7f4, data, tail4] + - [0x6e7f4, data, tail5] - [0x6e99c, .rodata, ov_SC04_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6eb14, data, tail5] + - [0x6eb14, data, tail6] - [0x70114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x70117] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_010.yaml b/config/splat.ov_SC04_010.yaml index 6d92c6b8b..899179371 100644 --- a/config/splat.ov_SC04_010.yaml +++ b/config/splat.ov_SC04_010.yaml @@ -102,12 +102,14 @@ segments: - [0x55ff8, data, tail] - [0x6507c, .rodata, ov_SC04_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65148, data, tail2] + - [0x65b38, .rodata, ov_SC04_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65b54, data, tail3] - [0x65b58, .rodata, ov_SC04_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b74, data, tail3] + - [0x65b74, data, tail4] - [0x65c6c, .rodata, ov_SC04_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65c80, data, tail4] + - [0x65c80, data, tail5] - [0x65e28, .rodata, ov_SC04_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fa0, data, tail5] + - [0x65fa0, data, tail6] - [0x675EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x675EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_011.yaml b/config/splat.ov_SC04_011.yaml index e53721bc8..145229785 100644 --- a/config/splat.ov_SC04_011.yaml +++ b/config/splat.ov_SC04_011.yaml @@ -102,12 +102,14 @@ segments: - [0x68288, data, tail] - [0xc4618, .rodata, ov_SC04_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc46e4, data, tail2] + - [0xc50d4, .rodata, ov_SC04_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc50f0, data, tail3] - [0xc50f4, .rodata, ov_SC04_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5110, data, tail3] + - [0xc5110, data, tail4] - [0xc5208, .rodata, ov_SC04_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc521c, data, tail4] + - [0xc521c, data, tail5] - [0xc53c4, .rodata, ov_SC04_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc553c, data, tail5] + - [0xc553c, data, tail6] - [0xC9554, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC9557] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_012.yaml b/config/splat.ov_SC04_012.yaml index 1960947d7..3c3caf6d7 100644 --- a/config/splat.ov_SC04_012.yaml +++ b/config/splat.ov_SC04_012.yaml @@ -102,12 +102,14 @@ segments: - [0x5645c, data, tail] - [0x6775c, .rodata, ov_SC04_012] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x67828, data, tail2] + - [0x68218, .rodata, ov_SC04_012_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68234, data, tail3] - [0x68238, .rodata, ov_SC04_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68254, data, tail3] + - [0x68254, data, tail4] - [0x6834c, .rodata, ov_SC04_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68360, data, tail4] + - [0x68360, data, tail5] - [0x68508, .rodata, ov_SC04_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68680, data, tail5] + - [0x68680, data, tail6] - [0x6B0E4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6B0E7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_015.yaml b/config/splat.ov_SC04_015.yaml index 5b947ad3d..ac0e983f1 100644 --- a/config/splat.ov_SC04_015.yaml +++ b/config/splat.ov_SC04_015.yaml @@ -102,12 +102,14 @@ segments: - [0x5c38c, data, tail] - [0x9e3f4, .rodata, ov_SC04_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e4c0, data, tail2] + - [0x9eeb0, .rodata, ov_SC04_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9eecc, data, tail3] - [0x9eed0, .rodata, ov_SC04_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eeec, data, tail3] + - [0x9eeec, data, tail4] - [0x9efe4, .rodata, ov_SC04_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eff8, data, tail4] + - [0x9eff8, data, tail5] - [0x9f1a0, .rodata, ov_SC04_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9f318, data, tail5] + - [0x9f318, data, tail6] - [0xA1284, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA1287] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_016.yaml b/config/splat.ov_SC04_016.yaml index 14592b4bb..663669966 100644 --- a/config/splat.ov_SC04_016.yaml +++ b/config/splat.ov_SC04_016.yaml @@ -102,12 +102,14 @@ segments: - [0x57e58, data, tail] - [0x7c5ac, .rodata, ov_SC04_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7c678, data, tail2] + - [0x7d068, .rodata, ov_SC04_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7d084, data, tail3] - [0x7d088, .rodata, ov_SC04_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d0a4, data, tail3] + - [0x7d0a4, data, tail4] - [0x7d19c, .rodata, ov_SC04_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d1b0, data, tail4] + - [0x7d1b0, data, tail5] - [0x7d358, .rodata, ov_SC04_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d4d0, data, tail5] + - [0x7d4d0, data, tail6] - [0x84184, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x84187] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_018.yaml b/config/splat.ov_SC04_018.yaml index 51bbe19c8..8987346f8 100644 --- a/config/splat.ov_SC04_018.yaml +++ b/config/splat.ov_SC04_018.yaml @@ -102,12 +102,14 @@ segments: - [0x64dd0, data, tail] - [0xbc3c4, .rodata, ov_SC04_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc490, data, tail2] + - [0xbce80, .rodata, ov_SC04_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbce9c, data, tail3] - [0xbcea0, .rodata, ov_SC04_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail3] + - [0xbcebc, data, tail4] - [0xbcfb4, .rodata, ov_SC04_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail4] + - [0xbcfc8, data, tail5] - [0xbd170, .rodata, ov_SC04_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail5] + - [0xbd2e8, data, tail6] - [0xBF9CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBF9CF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_019.yaml b/config/splat.ov_SC04_019.yaml index d8ffa3bc6..fd22a69b5 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -102,12 +102,14 @@ segments: - [0x64dd0, data, tail] - [0xbc3c4, .rodata, ov_SC04_019] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc490, data, tail2] + - [0xbce80, .rodata, ov_SC04_019_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbce9c, data, tail3] - [0xbcea0, .rodata, ov_SC04_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail3] + - [0xbcebc, data, tail4] - [0xbcfb4, .rodata, ov_SC04_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail4] + - [0xbcfc8, data, tail5] - [0xbd170, .rodata, ov_SC04_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail5] + - [0xbd2e8, data, tail6] - [0xBF9CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBF9CF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_020.yaml b/config/splat.ov_SC04_020.yaml index 0e61640f7..3149e6f6e 100644 --- a/config/splat.ov_SC04_020.yaml +++ b/config/splat.ov_SC04_020.yaml @@ -102,12 +102,14 @@ segments: - [0x5b1a8, data, tail] - [0x91dec, .rodata, ov_SC04_020] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x91eb8, data, tail2] + - [0x928a8, .rodata, ov_SC04_020_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x928c4, data, tail3] - [0x928c8, .rodata, ov_SC04_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928e4, data, tail3] + - [0x928e4, data, tail4] - [0x929dc, .rodata, ov_SC04_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x929f0, data, tail4] + - [0x929f0, data, tail5] - [0x92b98, .rodata, ov_SC04_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92d10, data, tail5] + - [0x92d10, data, tail6] - [0x94654, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x94657] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC04_021.yaml b/config/splat.ov_SC04_021.yaml index 5836c17a2..7e7cb6969 100644 --- a/config/splat.ov_SC04_021.yaml +++ b/config/splat.ov_SC04_021.yaml @@ -102,12 +102,14 @@ segments: - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC04_021] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] + - [0x65f44, .rodata, ov_SC04_021_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail3] - [0x65f64, .rodata, ov_SC04_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail3] + - [0x65f80, data, tail4] - [0x66078, .rodata, ov_SC04_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail4] + - [0x6608c, data, tail5] - [0x66234, .rodata, ov_SC04_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail5] + - [0x663ac, data, tail6] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_000.yaml b/config/splat.ov_SC05_000.yaml index 2180c4225..65643939f 100644 --- a/config/splat.ov_SC05_000.yaml +++ b/config/splat.ov_SC05_000.yaml @@ -102,12 +102,14 @@ segments: - [0x560e8, data, tail] - [0x705d8, .rodata, ov_SC05_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x706a4, data, tail2] + - [0x71094, .rodata, ov_SC05_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x710b0, data, tail3] - [0x710b4, .rodata, ov_SC05_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710d0, data, tail3] + - [0x710d0, data, tail4] - [0x711c8, .rodata, ov_SC05_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711dc, data, tail4] + - [0x711dc, data, tail5] - [0x71384, .rodata, ov_SC05_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x714fc, data, tail5] + - [0x714fc, data, tail6] - [0x72AFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72AFF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_001.yaml b/config/splat.ov_SC05_001.yaml index 00c4f974e..a4d25e1e3 100644 --- a/config/splat.ov_SC05_001.yaml +++ b/config/splat.ov_SC05_001.yaml @@ -102,12 +102,14 @@ segments: - [0x5d8c4, data, tail] - [0x8b58c, .rodata, ov_SC05_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b658, data, tail2] + - [0x8c048, .rodata, ov_SC05_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8c064, data, tail3] - [0x8c068, .rodata, ov_SC05_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c084, data, tail3] + - [0x8c084, data, tail4] - [0x8c17c, .rodata, ov_SC05_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c190, data, tail4] + - [0x8c190, data, tail5] - [0x8c338, .rodata, ov_SC05_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c4b0, data, tail5] + - [0x8c4b0, data, tail6] - [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 diff --git a/config/splat.ov_SC05_002.yaml b/config/splat.ov_SC05_002.yaml index 556e23427..d4f73cc8a 100644 --- a/config/splat.ov_SC05_002.yaml +++ b/config/splat.ov_SC05_002.yaml @@ -102,12 +102,14 @@ segments: - [0x58084, data, tail] - [0x75938, .rodata, ov_SC05_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x75a04, data, tail2] + - [0x763f4, .rodata, ov_SC05_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76410, data, tail3] - [0x76414, .rodata, ov_SC05_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76430, data, tail3] + - [0x76430, data, tail4] - [0x76528, .rodata, ov_SC05_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7653c, data, tail4] + - [0x7653c, data, tail5] - [0x766e4, .rodata, ov_SC05_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7685c, data, tail5] + - [0x7685c, data, tail6] - [0x77E64, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x77E67] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_003.yaml b/config/splat.ov_SC05_003.yaml index a252b29af..500eaa031 100644 --- a/config/splat.ov_SC05_003.yaml +++ b/config/splat.ov_SC05_003.yaml @@ -102,12 +102,14 @@ segments: - [0x5a3bc, data, tail] - [0x82434, .rodata, ov_SC05_003] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82500, data, tail2] + - [0x82ef0, .rodata, ov_SC05_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82f0c, data, tail3] - [0x82f10, .rodata, ov_SC05_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f2c, data, tail3] + - [0x82f2c, data, tail4] - [0x83024, .rodata, ov_SC05_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83038, data, tail4] + - [0x83038, data, tail5] - [0x831e0, .rodata, ov_SC05_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83358, data, tail5] + - [0x83358, data, tail6] - [0x84974, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x84977] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_004.yaml b/config/splat.ov_SC05_004.yaml index e830bde3a..9671cb60a 100644 --- a/config/splat.ov_SC05_004.yaml +++ b/config/splat.ov_SC05_004.yaml @@ -102,12 +102,14 @@ segments: - [0x594c8, data, tail] - [0x74a28, .rodata, ov_SC05_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74af4, data, tail2] + - [0x754e4, .rodata, ov_SC05_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75500, data, tail3] - [0x75504, .rodata, ov_SC05_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75520, data, tail3] + - [0x75520, data, tail4] - [0x75618, .rodata, ov_SC05_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7562c, data, tail4] + - [0x7562c, data, tail5] - [0x757d4, .rodata, ov_SC05_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7594c, data, tail5] + - [0x7594c, data, tail6] - [0x771CC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x771CF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_005.yaml b/config/splat.ov_SC05_005.yaml index 15a4b8099..9461a1642 100644 --- a/config/splat.ov_SC05_005.yaml +++ b/config/splat.ov_SC05_005.yaml @@ -102,12 +102,14 @@ segments: - [0x5a29c, data, tail] - [0x87710, .rodata, ov_SC05_005] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x877dc, data, tail2] + - [0x881cc, .rodata, ov_SC05_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x881e8, data, tail3] - [0x881ec, .rodata, ov_SC05_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88208, data, tail3] + - [0x88208, data, tail4] - [0x88300, .rodata, ov_SC05_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88314, data, tail4] + - [0x88314, data, tail5] - [0x884bc, .rodata, ov_SC05_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88634, data, tail5] + - [0x88634, data, tail6] - [0x89ED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x89ED7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_006.yaml b/config/splat.ov_SC05_006.yaml index 70c58673a..9de1d77a0 100644 --- a/config/splat.ov_SC05_006.yaml +++ b/config/splat.ov_SC05_006.yaml @@ -102,12 +102,14 @@ segments: - [0x572bc, data, tail] - [0x65860, .rodata, ov_SC05_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6592c, data, tail2] + - [0x6631c, .rodata, ov_SC05_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66338, data, tail3] - [0x6633c, .rodata, ov_SC05_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66358, data, tail3] + - [0x66358, data, tail4] - [0x66450, .rodata, ov_SC05_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66464, data, tail4] + - [0x66464, data, tail5] - [0x6660c, .rodata, ov_SC05_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66784, data, tail5] + - [0x66784, data, tail6] - [0x68004, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x68007] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_007.yaml b/config/splat.ov_SC05_007.yaml index dbae2817f..dab07da5e 100644 --- a/config/splat.ov_SC05_007.yaml +++ b/config/splat.ov_SC05_007.yaml @@ -102,12 +102,14 @@ segments: - [0x588b8, data, tail] - [0x72838, .rodata, ov_SC05_007] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72904, data, tail2] + - [0x732f4, .rodata, ov_SC05_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73310, data, tail3] - [0x73314, .rodata, ov_SC05_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73330, data, tail3] + - [0x73330, data, tail4] - [0x73428, .rodata, ov_SC05_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7343c, data, tail4] + - [0x7343c, data, tail5] - [0x735e4, .rodata, ov_SC05_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7375c, data, tail5] + - [0x7375c, data, tail6] - [0x74DA4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x74DA7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_008.yaml b/config/splat.ov_SC05_008.yaml index 97cd8af1d..6f53b732d 100644 --- a/config/splat.ov_SC05_008.yaml +++ b/config/splat.ov_SC05_008.yaml @@ -102,12 +102,14 @@ segments: - [0x5a810, data, tail] - [0x76b6c, .rodata, ov_SC05_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76c38, data, tail2] + - [0x77628, .rodata, ov_SC05_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77644, data, tail3] - [0x77648, .rodata, ov_SC05_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77664, data, tail3] + - [0x77664, data, tail4] - [0x7775c, .rodata, ov_SC05_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77770, data, tail4] + - [0x77770, data, tail5] - [0x77918, .rodata, ov_SC05_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a90, data, tail5] + - [0x77a90, data, tail6] - [0x79190, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x79193] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_010.yaml b/config/splat.ov_SC05_010.yaml index 0a131539e..665ff562a 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -102,12 +102,14 @@ segments: - [0x607fc, data, tail] - [0x9c7b4, .rodata, ov_SC05_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c880, data, tail2] + - [0x9d270, .rodata, ov_SC05_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d28c, data, tail3] - [0x9d290, .rodata, ov_SC05_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d2ac, data, tail3] + - [0x9d2ac, data, tail4] - [0x9d3a4, .rodata, ov_SC05_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d3b8, data, tail4] + - [0x9d3b8, data, tail5] - [0x9d560, .rodata, ov_SC05_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d6d8, data, tail5] + - [0x9d6d8, data, tail6] - [0x9FED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FED7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_011.yaml b/config/splat.ov_SC05_011.yaml index 1e5c89813..4511786c8 100644 --- a/config/splat.ov_SC05_011.yaml +++ b/config/splat.ov_SC05_011.yaml @@ -102,12 +102,14 @@ segments: - [0x55b74, data, tail] - [0x72b18, .rodata, ov_SC05_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72be4, data, tail2] + - [0x735d4, .rodata, ov_SC05_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x735f0, data, tail3] - [0x735f4, .rodata, ov_SC05_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73610, data, tail3] + - [0x73610, data, tail4] - [0x73708, .rodata, ov_SC05_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7371c, data, tail4] + - [0x7371c, data, tail5] - [0x738c4, .rodata, ov_SC05_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73a3c, data, tail5] + - [0x73a3c, data, tail6] - [0x75084, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x75087] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_017.yaml b/config/splat.ov_SC05_017.yaml index 8c2f6ea8e..c4c034039 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -102,12 +102,14 @@ segments: - [0x64d94, data, tail] - [0xc2200, .rodata, ov_SC05_017] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc22cc, data, tail2] + - [0xc2cbc, .rodata, ov_SC05_017_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc2cd8, data, tail3] - [0xc2cdc, .rodata, ov_SC05_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cf8, data, tail3] + - [0xc2cf8, data, tail4] - [0xc2df0, .rodata, ov_SC05_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2e04, data, tail4] + - [0xc2e04, data, tail5] - [0xc2fac, .rodata, ov_SC05_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3124, data, tail5] + - [0xc3124, data, tail6] - [0xC582C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xC582F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_018.yaml b/config/splat.ov_SC05_018.yaml index 669386a40..5dab40962 100644 --- a/config/splat.ov_SC05_018.yaml +++ b/config/splat.ov_SC05_018.yaml @@ -102,12 +102,14 @@ segments: - [0x5e790, data, tail] - [0xbbd74, .rodata, ov_SC05_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbbe40, data, tail2] + - [0xbc830, .rodata, ov_SC05_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbc84c, data, tail3] - [0xbc850, .rodata, ov_SC05_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc86c, data, tail3] + - [0xbc86c, data, tail4] - [0xbc964, .rodata, ov_SC05_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc978, data, tail4] + - [0xbc978, data, tail5] - [0xbcb20, .rodata, ov_SC05_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcc98, data, tail5] + - [0xbcc98, data, tail6] - [0xBE734, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBE737] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC05_019.yaml b/config/splat.ov_SC05_019.yaml index 1653a7b58..1f2b4ff0e 100644 --- a/config/splat.ov_SC05_019.yaml +++ b/config/splat.ov_SC05_019.yaml @@ -102,12 +102,14 @@ segments: - [0x570d4, data, tail] - [0x65488, .rodata, ov_SC05_019] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65554, data, tail2] + - [0x65f44, .rodata, ov_SC05_019_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail3] - [0x65f64, .rodata, ov_SC05_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail3] + - [0x65f80, data, tail4] - [0x66078, .rodata, ov_SC05_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail4] + - [0x6608c, data, tail5] - [0x66234, .rodata, ov_SC05_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail5] + - [0x663ac, data, tail6] - [0x679D4, bin, trailing] # final 1 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x679D5] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_000.yaml b/config/splat.ov_SC06_000.yaml index f4cd190d9..057e83f8d 100644 --- a/config/splat.ov_SC06_000.yaml +++ b/config/splat.ov_SC06_000.yaml @@ -102,12 +102,14 @@ segments: - [0x600e4, data, tail] - [0x84100, .rodata, ov_SC06_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x841cc, data, tail2] + - [0x84bbc, .rodata, ov_SC06_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x84bd8, data, tail3] - [0x84bdc, .rodata, ov_SC06_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bf8, data, tail3] + - [0x84bf8, data, tail4] - [0x84cf0, .rodata, ov_SC06_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84d04, data, tail4] + - [0x84d04, data, tail5] - [0x84eac, .rodata, ov_SC06_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85024, data, tail5] + - [0x85024, data, tail6] - [0x8A02C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8A02F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_006.yaml b/config/splat.ov_SC06_006.yaml index 54035a18b..96b281eaa 100644 --- a/config/splat.ov_SC06_006.yaml +++ b/config/splat.ov_SC06_006.yaml @@ -102,12 +102,14 @@ segments: - [0x59c08, data, tail] - [0xcda08, .rodata, ov_SC06_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcdad4, data, tail2] + - [0xce4c4, .rodata, ov_SC06_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce4e0, data, tail3] - [0xce4e4, .rodata, ov_SC06_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce500, data, tail3] + - [0xce500, data, tail4] - [0xce5f8, .rodata, ov_SC06_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce60c, data, tail4] + - [0xce60c, data, tail5] - [0xce7b4, .rodata, ov_SC06_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce92c, data, tail5] + - [0xce92c, data, tail6] - [0xD0A0C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xD0A0F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_008.yaml b/config/splat.ov_SC06_008.yaml index 823b8dad4..39a7ae399 100644 --- a/config/splat.ov_SC06_008.yaml +++ b/config/splat.ov_SC06_008.yaml @@ -102,12 +102,14 @@ segments: - [0x5d670, data, tail] - [0x7fae0, .rodata, ov_SC06_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fbac, data, tail2] + - [0x8059c, .rodata, ov_SC06_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x805b8, data, tail3] - [0x805bc, .rodata, ov_SC06_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x805d8, data, tail3] + - [0x805d8, data, tail4] - [0x806d0, .rodata, ov_SC06_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x806e4, data, tail4] + - [0x806e4, data, tail5] - [0x8088c, .rodata, ov_SC06_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80a04, data, tail5] + - [0x80a04, data, tail6] - [0x826DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x826DF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_010.yaml b/config/splat.ov_SC06_010.yaml index 943aefac3..3fdde4a43 100644 --- a/config/splat.ov_SC06_010.yaml +++ b/config/splat.ov_SC06_010.yaml @@ -102,12 +102,14 @@ segments: - [0x5e84c, data, tail] - [0x87b34, .rodata, ov_SC06_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87c00, data, tail2] + - [0x885f0, .rodata, ov_SC06_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8860c, data, tail3] - [0x88610, .rodata, ov_SC06_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8862c, data, tail3] + - [0x8862c, data, tail4] - [0x88724, .rodata, ov_SC06_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88738, data, tail4] + - [0x88738, data, tail5] - [0x888e0, .rodata, ov_SC06_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88a58, data, tail5] + - [0x88a58, data, tail6] - [0x8AB24, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8AB27] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_011.yaml b/config/splat.ov_SC06_011.yaml index ec5ce3793..70c7cb1fa 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -102,12 +102,14 @@ segments: - [0x582ac, data, tail] - [0x81694, .rodata, ov_SC06_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81760, data, tail2] + - [0x82150, .rodata, ov_SC06_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8216c, data, tail3] - [0x82170, .rodata, ov_SC06_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8218c, data, tail3] + - [0x8218c, data, tail4] - [0x82284, .rodata, ov_SC06_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82298, data, tail4] + - [0x82298, data, tail5] - [0x82440, .rodata, ov_SC06_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x825b8, data, tail5] + - [0x825b8, data, tail6] - [0x83BFC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x83BFF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_013.yaml b/config/splat.ov_SC06_013.yaml index 468ceaa68..27774ae2e 100644 --- a/config/splat.ov_SC06_013.yaml +++ b/config/splat.ov_SC06_013.yaml @@ -102,12 +102,14 @@ segments: - [0x56a28, data, tail] - [0x70568, .rodata, ov_SC06_013] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70634, data, tail2] + - [0x71024, .rodata, ov_SC06_013_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71040, data, tail3] - [0x71044, .rodata, ov_SC06_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71060, data, tail3] + - [0x71060, data, tail4] - [0x71158, .rodata, ov_SC06_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7116c, data, tail4] + - [0x7116c, data, tail5] - [0x71314, .rodata, ov_SC06_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7148c, data, tail5] + - [0x7148c, data, tail6] - [0x72AAC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x72AAF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_014.yaml b/config/splat.ov_SC06_014.yaml index 818a32dcb..33844fe3f 100644 --- a/config/splat.ov_SC06_014.yaml +++ b/config/splat.ov_SC06_014.yaml @@ -102,12 +102,14 @@ segments: - [0x57d8c, data, tail] - [0x76f58, .rodata, ov_SC06_014] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77024, data, tail2] + - [0x77a14, .rodata, ov_SC06_014_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77a30, data, tail3] - [0x77a34, .rodata, ov_SC06_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a50, data, tail3] + - [0x77a50, data, tail4] - [0x77b48, .rodata, ov_SC06_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77b5c, data, tail4] + - [0x77b5c, data, tail5] - [0x77d04, .rodata, ov_SC06_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e7c, data, tail5] + - [0x77e7c, data, tail6] - [0x794C4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x794C7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_015.yaml b/config/splat.ov_SC06_015.yaml index 5ab285786..1c69b017b 100644 --- a/config/splat.ov_SC06_015.yaml +++ b/config/splat.ov_SC06_015.yaml @@ -102,12 +102,14 @@ segments: - [0x568e4, data, tail] - [0x6a338, .rodata, ov_SC06_015] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6a404, data, tail2] + - [0x6adf4, .rodata, ov_SC06_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6ae10, data, tail3] - [0x6ae14, .rodata, ov_SC06_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae30, data, tail3] + - [0x6ae30, data, tail4] - [0x6af28, .rodata, ov_SC06_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6af3c, data, tail4] + - [0x6af3c, data, tail5] - [0x6b0e4, .rodata, ov_SC06_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b25c, data, tail5] + - [0x6b25c, data, tail6] - [0x6C8A4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6C8A7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_016.yaml b/config/splat.ov_SC06_016.yaml index 3fbe37d90..1b575d30f 100644 --- a/config/splat.ov_SC06_016.yaml +++ b/config/splat.ov_SC06_016.yaml @@ -102,12 +102,14 @@ segments: - [0x5ccf4, data, tail] - [0x74f80, .rodata, ov_SC06_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7504c, data, tail2] + - [0x75a3c, .rodata, ov_SC06_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75a58, data, tail3] - [0x75a5c, .rodata, ov_SC06_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a78, data, tail3] + - [0x75a78, data, tail4] - [0x75b70, .rodata, ov_SC06_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75b84, data, tail4] + - [0x75b84, data, tail5] - [0x75d2c, .rodata, ov_SC06_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75ea4, data, tail5] + - [0x75ea4, data, tail6] - [0x78114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x78117] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_018.yaml b/config/splat.ov_SC06_018.yaml index 3baa85cb9..a2a58908a 100644 --- a/config/splat.ov_SC06_018.yaml +++ b/config/splat.ov_SC06_018.yaml @@ -102,12 +102,14 @@ segments: - [0x6b430, data, tail] - [0xaa810, .rodata, ov_SC06_018] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa8dc, data, tail2] + - [0xab2cc, .rodata, ov_SC06_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab2e8, data, tail3] - [0xab2ec, .rodata, ov_SC06_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab308, data, tail3] + - [0xab308, data, tail4] - [0xab400, .rodata, ov_SC06_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab414, data, tail4] + - [0xab414, data, tail5] - [0xab5bc, .rodata, ov_SC06_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab734, data, tail5] + - [0xab734, data, tail6] - [0xADA44, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xADA47] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_020.yaml b/config/splat.ov_SC06_020.yaml index bb456fe4e..39647950d 100644 --- a/config/splat.ov_SC06_020.yaml +++ b/config/splat.ov_SC06_020.yaml @@ -102,12 +102,14 @@ segments: - [0x5ceb8, data, tail] - [0x900f8, .rodata, ov_SC06_020] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x901c4, data, tail2] + - [0x90bb4, .rodata, ov_SC06_020_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90bd0, data, tail3] - [0x90bd4, .rodata, ov_SC06_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bf0, data, tail3] + - [0x90bf0, data, tail4] - [0x90ce8, .rodata, ov_SC06_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90cfc, data, tail4] + - [0x90cfc, data, tail5] - [0x90ea4, .rodata, ov_SC06_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9101c, data, tail5] + - [0x9101c, data, tail6] - [0x92894, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x92897] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_022.yaml b/config/splat.ov_SC06_022.yaml index ac4a5ae5d..b2cf6165d 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -102,12 +102,14 @@ segments: - [0x65174, data, tail] - [0xb7908, .rodata, ov_SC06_022] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb79d4, data, tail2] + - [0xb83c4, .rodata, ov_SC06_022_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb83e0, data, tail3] - [0xb83e4, .rodata, ov_SC06_022_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8400, data, tail3] + - [0xb8400, data, tail4] - [0xb84f8, .rodata, ov_SC06_022_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb850c, data, tail4] + - [0xb850c, data, tail5] - [0xb86b4, .rodata, ov_SC06_022_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb882c, data, tail5] + - [0xb882c, data, tail6] - [0xBA114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xBA117] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_024.yaml b/config/splat.ov_SC06_024.yaml index 3fb660314..3bdc96cdd 100644 --- a/config/splat.ov_SC06_024.yaml +++ b/config/splat.ov_SC06_024.yaml @@ -102,12 +102,14 @@ segments: - [0x6764c, data, tail] - [0xb6a4c, .rodata, ov_SC06_024] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb6b18, data, tail2] + - [0xb7508, .rodata, ov_SC06_024_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7524, data, tail3] - [0xb7528, .rodata, ov_SC06_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7544, data, tail3] + - [0xb7544, data, tail4] - [0xb763c, .rodata, ov_SC06_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7650, data, tail4] + - [0xb7650, data, tail5] - [0xb77f8, .rodata, ov_SC06_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7970, data, tail5] + - [0xb7970, data, tail6] - [0xB980C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xB980F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_025.yaml b/config/splat.ov_SC06_025.yaml index fca70e86f..cf6a84402 100644 --- a/config/splat.ov_SC06_025.yaml +++ b/config/splat.ov_SC06_025.yaml @@ -102,12 +102,14 @@ segments: - [0x5caf0, data, tail] - [0x86d6c, .rodata, ov_SC06_025] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x86e38, data, tail2] + - [0x87828, .rodata, ov_SC06_025_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87844, data, tail3] - [0x87848, .rodata, ov_SC06_025_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87864, data, tail3] + - [0x87864, data, tail4] - [0x8795c, .rodata, ov_SC06_025_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87970, data, tail4] + - [0x87970, data, tail5] - [0x87b18, .rodata, ov_SC06_025_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87c90, data, tail5] + - [0x87c90, data, tail6] - [0x8A12C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x8A12F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_027.yaml b/config/splat.ov_SC06_027.yaml index e9c496714..00ead7a6a 100644 --- a/config/splat.ov_SC06_027.yaml +++ b/config/splat.ov_SC06_027.yaml @@ -102,12 +102,14 @@ segments: - [0x55e30, data, tail] - [0x72da8, .rodata, ov_SC06_027] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x72e74, data, tail2] + - [0x73864, .rodata, ov_SC06_027_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73880, data, tail3] - [0x73884, .rodata, ov_SC06_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x738a0, data, tail3] + - [0x738a0, data, tail4] - [0x73998, .rodata, ov_SC06_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x739ac, data, tail4] + - [0x739ac, data, tail5] - [0x73b54, .rodata, ov_SC06_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73ccc, data, tail5] + - [0x73ccc, data, tail6] - [0x752D4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x752D7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_029.yaml b/config/splat.ov_SC06_029.yaml index 4a301d49a..77dbd108c 100644 --- a/config/splat.ov_SC06_029.yaml +++ b/config/splat.ov_SC06_029.yaml @@ -102,12 +102,14 @@ segments: - [0x643c0, data, tail] - [0xb2424, .rodata, ov_SC06_029] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb24f0, data, tail2] + - [0xb2ee0, .rodata, ov_SC06_029_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb2efc, data, tail3] - [0xb2f00, .rodata, ov_SC06_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f1c, data, tail3] + - [0xb2f1c, data, tail4] - [0xb3014, .rodata, ov_SC06_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3028, data, tail4] + - [0xb3028, data, tail5] - [0xb31d0, .rodata, ov_SC06_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3348, data, tail5] + - [0xb3348, data, tail6] - [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 diff --git a/config/splat.ov_SC06_030.yaml b/config/splat.ov_SC06_030.yaml index 484b828f3..697ff42dd 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -102,12 +102,14 @@ segments: - [0x59cb4, data, tail] - [0x8f788, .rodata, ov_SC06_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f854, data, tail2] + - [0x90244, .rodata, ov_SC06_030_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90260, data, tail3] - [0x90264, .rodata, ov_SC06_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90280, data, tail3] + - [0x90280, data, tail4] - [0x90378, .rodata, ov_SC06_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9038c, data, tail4] + - [0x9038c, data, tail5] - [0x90534, .rodata, ov_SC06_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x906ac, data, tail5] + - [0x906ac, data, tail6] - [0x91F2C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x91F2F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_032.yaml b/config/splat.ov_SC06_032.yaml index 004af6237..4061b7b25 100644 --- a/config/splat.ov_SC06_032.yaml +++ b/config/splat.ov_SC06_032.yaml @@ -102,12 +102,14 @@ segments: - [0x6b180, data, tail] - [0xa5de4, .rodata, ov_SC06_032] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5eb0, data, tail2] + - [0xa68a0, .rodata, ov_SC06_032_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa68bc, data, tail3] - [0xa68c0, .rodata, ov_SC06_032_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68dc, data, tail3] + - [0xa68dc, data, tail4] - [0xa69d4, .rodata, ov_SC06_032_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa69e8, data, tail4] + - [0xa69e8, data, tail5] - [0xa6b90, .rodata, ov_SC06_032_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6d08, data, tail5] + - [0xa6d08, data, tail6] - [0xA9014, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA9017] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC06_033.yaml b/config/splat.ov_SC06_033.yaml index 8c3836255..44d1c77ae 100644 --- a/config/splat.ov_SC06_033.yaml +++ b/config/splat.ov_SC06_033.yaml @@ -102,12 +102,14 @@ segments: - [0x69690, data, tail] - [0xa5e98, .rodata, ov_SC06_033] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5f64, data, tail2] + - [0xa6954, .rodata, ov_SC06_033_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6970, data, tail3] - [0xa6974, .rodata, ov_SC06_033_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6990, data, tail3] + - [0xa6990, data, tail4] - [0xa6a88, .rodata, ov_SC06_033_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a9c, data, tail4] + - [0xa6a9c, data, tail5] - [0xa6c44, .rodata, ov_SC06_033_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6dbc, data, tail5] + - [0xa6dbc, data, tail6] - [0xA8E94, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8E97] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC07_000.yaml b/config/splat.ov_SC07_000.yaml index 7955f509b..3e442e0b6 100644 --- a/config/splat.ov_SC07_000.yaml +++ b/config/splat.ov_SC07_000.yaml @@ -102,12 +102,14 @@ segments: - [0x5a4d8, data, tail] - [0xa54f4, .rodata, ov_SC07_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa55c0, data, tail2] + - [0xa5fb0, .rodata, ov_SC07_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa5fcc, data, tail3] - [0xa5fd0, .rodata, ov_SC07_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fec, data, tail3] + - [0xa5fec, data, tail4] - [0xa60e4, .rodata, ov_SC07_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa60f8, data, tail4] + - [0xa60f8, data, tail5] - [0xa62a0, .rodata, ov_SC07_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6418, data, tail5] + - [0xa6418, data, tail6] - [0xA8B8C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xA8B8F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC07_001.yaml b/config/splat.ov_SC07_001.yaml index 885cdb22d..9246af99f 100644 --- a/config/splat.ov_SC07_001.yaml +++ b/config/splat.ov_SC07_001.yaml @@ -102,12 +102,14 @@ segments: - [0x59388, data, tail] - [0x80690, .rodata, ov_SC07_001] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8075c, data, tail2] + - [0x8114c, .rodata, ov_SC07_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81168, data, tail3] - [0x8116c, .rodata, ov_SC07_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81188, data, tail3] + - [0x81188, data, tail4] - [0x81280, .rodata, ov_SC07_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81294, data, tail4] + - [0x81294, data, tail5] - [0x8143c, .rodata, ov_SC07_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x815b4, data, tail5] + - [0x815b4, data, tail6] - [0x82DB4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x82DB7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC07_002.yaml b/config/splat.ov_SC07_002.yaml index 5a08fd1a9..906df3345 100644 --- a/config/splat.ov_SC07_002.yaml +++ b/config/splat.ov_SC07_002.yaml @@ -102,12 +102,14 @@ segments: - [0x5e644, data, tail] - [0x71078, .rodata, ov_SC07_002] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71144, data, tail2] + - [0x71b34, .rodata, ov_SC07_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71b50, data, tail3] - [0x71b54, .rodata, ov_SC07_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b70, data, tail3] + - [0x71b70, data, tail4] - [0x71c68, .rodata, ov_SC07_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71c7c, data, tail4] + - [0x71c7c, data, tail5] - [0x71e24, .rodata, ov_SC07_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71f9c, data, tail5] + - [0x71f9c, data, tail6] - [0x77F7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x77F7F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC07_008.yaml b/config/splat.ov_SC07_008.yaml index 0e5860ef0..ee02fe29a 100644 --- a/config/splat.ov_SC07_008.yaml +++ b/config/splat.ov_SC07_008.yaml @@ -102,12 +102,14 @@ segments: - [0x5515c, data, tail] - [0x6c0c8, .rodata, ov_SC07_008] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c194, data, tail2] + - [0x6cb84, .rodata, ov_SC07_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cba0, data, tail3] - [0x6cba4, .rodata, ov_SC07_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cbc0, data, tail3] + - [0x6cbc0, data, tail4] - [0x6ccb8, .rodata, ov_SC07_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cccc, data, tail4] + - [0x6cccc, data, tail5] - [0x6ce74, .rodata, ov_SC07_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cfec, data, tail5] + - [0x6cfec, data, tail6] - [0x6E5EC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x6E5EF] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/config/splat.ov_SC07_009.yaml b/config/splat.ov_SC07_009.yaml index 373db868a..c52b7449f 100644 --- a/config/splat.ov_SC07_009.yaml +++ b/config/splat.ov_SC07_009.yaml @@ -102,12 +102,14 @@ segments: - [0x55c00, data, tail] - [0x79754, .rodata, ov_SC07_009] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79820, data, tail2] + - [0x7a210, .rodata, ov_SC07_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7a22c, data, tail3] - [0x7a230, .rodata, ov_SC07_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a24c, data, tail3] + - [0x7a24c, data, tail4] - [0x7a344, .rodata, ov_SC07_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a358, data, tail4] + - [0x7a358, data, tail5] - [0x7a500, .rodata, ov_SC07_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a678, data, tail5] + - [0x7a678, data, tail6] - [0x7BC7C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x7BC7F] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/src/ov_SC01_000/ov_SC01_000_after.c b/src/ov_SC01_000/ov_SC01_000_after.c index 4fe2be957..ec4db5521 100644 --- a/src/ov_SC01_000/ov_SC01_000_after.c +++ b/src/ov_SC01_000/ov_SC01_000_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801812A4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80181228[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801812A4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181228)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_after.c b/src/ov_SC01_001/ov_SC01_001_after.c index 0ac682050..27361d375 100644 --- a/src/ov_SC01_001/ov_SC01_001_after.c +++ b/src/ov_SC01_001/ov_SC01_001_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185EF4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80185E78[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185EF4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185E78)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_after.c b/src/ov_SC01_004/ov_SC01_004_after.c index 5200598ee..07e2bab7a 100644 --- a/src/ov_SC01_004/ov_SC01_004_after.c +++ b/src/ov_SC01_004/ov_SC01_004_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801818B8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_8018183C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801818B8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018183C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_after.c b/src/ov_SC01_005/ov_SC01_005_after.c index dec211980..41c4838e1 100644 --- a/src/ov_SC01_005/ov_SC01_005_after.c +++ b/src/ov_SC01_005/ov_SC01_005_after.c @@ -3718,7 +3718,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801849D0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_after.c b/src/ov_SC01_006/ov_SC01_006_after.c index de25ee85b..fe4962721 100644 --- a/src/ov_SC01_006/ov_SC01_006_after.c +++ b/src/ov_SC01_006/ov_SC01_006_after.c @@ -3718,7 +3718,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801849D0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_after.c b/src/ov_SC01_008/ov_SC01_008_after.c index cbf79dba7..96e42079a 100644 --- a/src/ov_SC01_008/ov_SC01_008_after.c +++ b/src/ov_SC01_008/ov_SC01_008_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181E2C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181DB0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181E2C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181DB0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_after.c b/src/ov_SC01_009/ov_SC01_009_after.c index 0508b1ac1..f625274cb 100644 --- a/src/ov_SC01_009/ov_SC01_009_after.c +++ b/src/ov_SC01_009/ov_SC01_009_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185014[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s8 D_80184F98[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185014[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184F98)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_after.c b/src/ov_SC01_074/ov_SC01_074_after.c index 143fd49eb..3a969978c 100644 --- a/src/ov_SC01_074/ov_SC01_074_after.c +++ b/src/ov_SC01_074/ov_SC01_074_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180C94[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180C18; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180C94[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180C18); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_after.c b/src/ov_SC01_080/ov_SC01_080_after.c index 247fdffcc..1cbcf7788 100644 --- a/src/ov_SC01_080/ov_SC01_080_after.c +++ b/src/ov_SC01_080/ov_SC01_080_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185BF4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80185B78; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185BF4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185B78); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_after.c b/src/ov_SC01_084/ov_SC01_084_after.c index bc057cb57..d6bdb4e1b 100644 --- a/src/ov_SC01_084/ov_SC01_084_after.c +++ b/src/ov_SC01_084/ov_SC01_084_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188EE8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80188E6C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188EE8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E6C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_after.c b/src/ov_SC02_000/ov_SC02_000_after.c index 481b34a99..05e283b2e 100644 --- a/src/ov_SC02_000/ov_SC02_000_after.c +++ b/src/ov_SC02_000/ov_SC02_000_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D298[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018D21C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_after.c b/src/ov_SC02_003/ov_SC02_003_after.c index 213d782dd..a810aeb0f 100644 --- a/src/ov_SC02_003/ov_SC02_003_after.c +++ b/src/ov_SC02_003/ov_SC02_003_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D298[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018D21C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_after.c b/src/ov_SC02_004/ov_SC02_004_after.c index 6de372b06..bee9f8432 100644 --- a/src/ov_SC02_004/ov_SC02_004_after.c +++ b/src/ov_SC02_004/ov_SC02_004_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180378[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801802FC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180378[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801802FC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_after.c b/src/ov_SC02_005/ov_SC02_005_after.c index 3e84b860f..572779028 100644 --- a/src/ov_SC02_005/ov_SC02_005_after.c +++ b/src/ov_SC02_005/ov_SC02_005_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80192F7C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80192F00; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80192F7C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192F00); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_after.c b/src/ov_SC02_011/ov_SC02_011_after.c index 7e21c2504..178f4c04c 100644 --- a/src/ov_SC02_011/ov_SC02_011_after.c +++ b/src/ov_SC02_011/ov_SC02_011_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801933CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80193350; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801933CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80193350)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_after.c b/src/ov_SC02_015/ov_SC02_015_after.c index cd5ede0ec..61990ffe4 100644 --- a/src/ov_SC02_015/ov_SC02_015_after.c +++ b/src/ov_SC02_015/ov_SC02_015_after.c @@ -3711,7 +3711,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801808E0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180864; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801808E0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180864); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_after.c b/src/ov_SC02_016/ov_SC02_016_after.c index 39c3aed1f..510599f83 100644 --- a/src/ov_SC02_016/ov_SC02_016_after.c +++ b/src/ov_SC02_016/ov_SC02_016_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186B18[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80186A9C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186B18[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186A9C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_after.c b/src/ov_SC02_017/ov_SC02_017_after.c index ae5bc458d..faa648a3f 100644 --- a/src/ov_SC02_017/ov_SC02_017_after.c +++ b/src/ov_SC02_017/ov_SC02_017_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018CB70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 *D_8018CAF4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018CB70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018CAF4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_after.c b/src/ov_SC02_021/ov_SC02_021_after.c index 9000ea725..4aea00b9f 100644 --- a/src/ov_SC02_021/ov_SC02_021_after.c +++ b/src/ov_SC02_021/ov_SC02_021_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182164[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801820E8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182164[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801820E8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_after.c b/src/ov_SC02_026/ov_SC02_026_after.c index 1756f61fe..5cf4250cd 100644 --- a/src/ov_SC02_026/ov_SC02_026_after.c +++ b/src/ov_SC02_026/ov_SC02_026_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801887B8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018873C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801887B8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018873C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_after.c b/src/ov_SC02_027/ov_SC02_027_after.c index f5a7d5eae..64adcc0c8 100644 --- a/src/ov_SC02_027/ov_SC02_027_after.c +++ b/src/ov_SC02_027/ov_SC02_027_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D8DC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D860; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D860); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_after.c b/src/ov_SC02_028/ov_SC02_028_after.c index 0dad89e15..847f9815a 100644 --- a/src/ov_SC02_028/ov_SC02_028_after.c +++ b/src/ov_SC02_028/ov_SC02_028_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DAE0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DA64; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DA64); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_after.c b/src/ov_SC02_031/ov_SC02_031_after.c index 50e4d41e2..900643701 100644 --- a/src/ov_SC02_031/ov_SC02_031_after.c +++ b/src/ov_SC02_031/ov_SC02_031_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018730C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187290; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018730C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187290); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_after.c b/src/ov_SC02_035/ov_SC02_035_after.c index 52bb9b87c..840dec78f 100644 --- a/src/ov_SC02_035/ov_SC02_035_after.c +++ b/src/ov_SC02_035/ov_SC02_035_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186B6C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80186AF0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186B6C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186AF0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_after.c b/src/ov_SC02_039/ov_SC02_039_after.c index 1b48d03fb..57a263003 100644 --- a/src/ov_SC02_039/ov_SC02_039_after.c +++ b/src/ov_SC02_039/ov_SC02_039_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181798[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018171C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181798[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018171C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_after.c b/src/ov_SC02_041/ov_SC02_041_after.c index f858789e0..f85a35c5f 100644 --- a/src/ov_SC02_041/ov_SC02_041_after.c +++ b/src/ov_SC02_041/ov_SC02_041_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187468[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801873EC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187468[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801873EC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_after.c b/src/ov_SC03_001/ov_SC03_001_after.c index ec7139305..80f2a734c 100644 --- a/src/ov_SC03_001/ov_SC03_001_after.c +++ b/src/ov_SC03_001/ov_SC03_001_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018FBA8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018FB2C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018FB2C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_after.c b/src/ov_SC03_002/ov_SC03_002_after.c index 9e2fd1772..4b3bc27da 100644 --- a/src/ov_SC03_002/ov_SC03_002_after.c +++ b/src/ov_SC03_002/ov_SC03_002_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187B98[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80187B1C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187B98[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187B1C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_after.c b/src/ov_SC03_003/ov_SC03_003_after.c index bab088f90..3ed087092 100644 --- a/src/ov_SC03_003/ov_SC03_003_after.c +++ b/src/ov_SC03_003/ov_SC03_003_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181960[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801818E4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181960[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801818E4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_after.c b/src/ov_SC03_006/ov_SC03_006_after.c index df3fc6bd6..2826c1683 100644 --- a/src/ov_SC03_006/ov_SC03_006_after.c +++ b/src/ov_SC03_006/ov_SC03_006_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EC7C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018EC00; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018EC00); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_after.c b/src/ov_SC03_007/ov_SC03_007_after.c index 68dc9f12e..0cd69909f 100644 --- a/src/ov_SC03_007/ov_SC03_007_after.c +++ b/src/ov_SC03_007/ov_SC03_007_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189A74[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 *D_801899F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189A74[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801899F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_after.c b/src/ov_SC03_010/ov_SC03_010_after.c index 7bdff22c2..880caac98 100644 --- a/src/ov_SC03_010/ov_SC03_010_after.c +++ b/src/ov_SC03_010/ov_SC03_010_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182594[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80182518; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182594[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182518)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_after.c b/src/ov_SC03_011/ov_SC03_011_after.c index 5d330e2cc..31bd123ef 100644 --- a/src/ov_SC03_011/ov_SC03_011_after.c +++ b/src/ov_SC03_011/ov_SC03_011_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183904[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80183888; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183904[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183888); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_after.c b/src/ov_SC03_012/ov_SC03_012_after.c index 60dc5cb9e..f121e1abd 100644 --- a/src/ov_SC03_012/ov_SC03_012_after.c +++ b/src/ov_SC03_012/ov_SC03_012_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801807E4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180768; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801807E4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180768); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_after.c b/src/ov_SC03_013/ov_SC03_013_after.c index 64acbcaef..f5533c9da 100644 --- a/src/ov_SC03_013/ov_SC03_013_after.c +++ b/src/ov_SC03_013/ov_SC03_013_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801835CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80183550; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801835CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183550); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_after.c b/src/ov_SC03_014/ov_SC03_014_after.c index f063c6a49..c78dfe721 100644 --- a/src/ov_SC03_014/ov_SC03_014_after.c +++ b/src/ov_SC03_014/ov_SC03_014_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DC08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DB8C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_after.c b/src/ov_SC03_015/ov_SC03_015_after.c index 1438f63f0..17e181caf 100644 --- a/src/ov_SC03_015/ov_SC03_015_after.c +++ b/src/ov_SC03_015/ov_SC03_015_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DC08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DB8C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_after.c b/src/ov_SC03_023/ov_SC03_023_after.c index 84a4c192b..9d9f71110 100644 --- a/src/ov_SC03_023/ov_SC03_023_after.c +++ b/src/ov_SC03_023/ov_SC03_023_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181584[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80181508[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181584[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181508)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_after.c b/src/ov_SC03_024/ov_SC03_024_after.c index 8481d4242..6610af393 100644 --- a/src/ov_SC03_024/ov_SC03_024_after.c +++ b/src/ov_SC03_024/ov_SC03_024_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801895A8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018952C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801895A8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018952C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_after.c b/src/ov_SC03_028/ov_SC03_028_after.c index 0e8061e4d..b7c0c701b 100644 --- a/src/ov_SC03_028/ov_SC03_028_after.c +++ b/src/ov_SC03_028/ov_SC03_028_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018E074[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DFF8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018E074[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DFF8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_after.c b/src/ov_SC03_029/ov_SC03_029_after.c index cafec4d5b..6ef9058f1 100644 --- a/src/ov_SC03_029/ov_SC03_029_after.c +++ b/src/ov_SC03_029/ov_SC03_029_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189EAC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80189E30; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189EAC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80189E30)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_after.c b/src/ov_SC03_030/ov_SC03_030_after.c index d8173bb79..3f639ea0b 100644 --- a/src/ov_SC03_030/ov_SC03_030_after.c +++ b/src/ov_SC03_030/ov_SC03_030_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801844E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018446C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801844E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018446C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_after.c b/src/ov_SC03_031/ov_SC03_031_after.c index 8195aada1..8ee9b2ea6 100644 --- a/src/ov_SC03_031/ov_SC03_031_after.c +++ b/src/ov_SC03_031/ov_SC03_031_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A04[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80184988; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A04[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184988); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_after.c b/src/ov_SC03_089/ov_SC03_089_after.c index c50d7f69e..4ff24f5bc 100644 --- a/src/ov_SC03_089/ov_SC03_089_after.c +++ b/src/ov_SC03_089/ov_SC03_089_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018BD00[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char *D_8018BC84; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018BD00[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BC84)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_after.c b/src/ov_SC03_090/ov_SC03_090_after.c index 65e17bba7..212ab7823 100644 --- a/src/ov_SC03_090/ov_SC03_090_after.c +++ b/src/ov_SC03_090/ov_SC03_090_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018E124[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018E0A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018E124[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018E0A8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_after.c b/src/ov_SC03_091/ov_SC03_091_after.c index e9e71a225..ef4964800 100644 --- a/src/ov_SC03_091/ov_SC03_091_after.c +++ b/src/ov_SC03_091/ov_SC03_091_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EFCC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018EF50; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EF50)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_after.c b/src/ov_SC03_092/ov_SC03_092_after.c index 4f4db65a0..9ceb2f2e3 100644 --- a/src/ov_SC03_092/ov_SC03_092_after.c +++ b/src/ov_SC03_092/ov_SC03_092_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018739C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187320; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018739C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187320); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_after.c b/src/ov_SC03_093/ov_SC03_093_after.c index 50e305d65..6e6af769e 100644 --- a/src/ov_SC03_093/ov_SC03_093_after.c +++ b/src/ov_SC03_093/ov_SC03_093_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188574[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801884F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188574[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801884F8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_after.c b/src/ov_SC03_094/ov_SC03_094_after.c index deb37a6f8..105ed66c5 100644 --- a/src/ov_SC03_094/ov_SC03_094_after.c +++ b/src/ov_SC03_094/ov_SC03_094_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189F70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80189EF4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189F70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189EF4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_after.c b/src/ov_SC03_095/ov_SC03_095_after.c index bfadb0b2f..de41f688e 100644 --- a/src/ov_SC03_095/ov_SC03_095_after.c +++ b/src/ov_SC03_095/ov_SC03_095_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801835D0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80183554; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801835D0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183554)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_after.c b/src/ov_SC03_096/ov_SC03_096_after.c index e67ec9770..e9c3f3d00 100644 --- a/src/ov_SC03_096/ov_SC03_096_after.c +++ b/src/ov_SC03_096/ov_SC03_096_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183150[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801830D4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183150[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801830D4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_after.c b/src/ov_SC03_097/ov_SC03_097_after.c index c6bddecac..14734aa55 100644 --- a/src/ov_SC03_097/ov_SC03_097_after.c +++ b/src/ov_SC03_097/ov_SC03_097_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188530[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_801884B4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188530[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801884B4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_after.c b/src/ov_SC03_098/ov_SC03_098_after.c index d5f78e15a..5719bd2f4 100644 --- a/src/ov_SC03_098/ov_SC03_098_after.c +++ b/src/ov_SC03_098/ov_SC03_098_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801879BC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187940; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801879BC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187940); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_after.c b/src/ov_SC03_099/ov_SC03_099_after.c index 9dc1014ca..27ab32378 100644 --- a/src/ov_SC03_099/ov_SC03_099_after.c +++ b/src/ov_SC03_099/ov_SC03_099_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185ABC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80185A40; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185ABC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185A40); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_after.c b/src/ov_SC03_100/ov_SC03_100_after.c index f14119f05..96b0723ea 100644 --- a/src/ov_SC03_100/ov_SC03_100_after.c +++ b/src/ov_SC03_100/ov_SC03_100_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186F88[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80186F0C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186F88[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186F0C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_after.c b/src/ov_SC03_101/ov_SC03_101_after.c index 982c56136..aeb9016c3 100644 --- a/src/ov_SC03_101/ov_SC03_101_after.c +++ b/src/ov_SC03_101/ov_SC03_101_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185F64[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80185EE8[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185F64[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185EE8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_after.c b/src/ov_SC03_102/ov_SC03_102_after.c index dcaa080d7..da3b0be77 100644 --- a/src/ov_SC03_102/ov_SC03_102_after.c +++ b/src/ov_SC03_102/ov_SC03_102_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018881C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801887A0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018881C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801887A0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_after.c b/src/ov_SC03_103/ov_SC03_103_after.c index af858d2a7..0d88709f8 100644 --- a/src/ov_SC03_103/ov_SC03_103_after.c +++ b/src/ov_SC03_103/ov_SC03_103_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801867CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80186750[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801867CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186750)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_after.c b/src/ov_SC03_104/ov_SC03_104_after.c index f0014f38f..3d8ff3882 100644 --- a/src/ov_SC03_104/ov_SC03_104_after.c +++ b/src/ov_SC03_104/ov_SC03_104_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D35C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D2E0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D35C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D2E0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_after.c b/src/ov_SC03_105/ov_SC03_105_after.c index fb427c907..0abd28dc2 100644 --- a/src/ov_SC03_105/ov_SC03_105_after.c +++ b/src/ov_SC03_105/ov_SC03_105_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C9E4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018C968; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018C968); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_after.c b/src/ov_SC03_108/ov_SC03_108_after.c index bce8dd567..6359bc1c0 100644 --- a/src/ov_SC03_108/ov_SC03_108_after.c +++ b/src/ov_SC03_108/ov_SC03_108_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018333C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801832C0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018333C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801832C0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_after.c b/src/ov_SC03_109/ov_SC03_109_after.c index ec99f94ed..40781108b 100644 --- a/src/ov_SC03_109/ov_SC03_109_after.c +++ b/src/ov_SC03_109/ov_SC03_109_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801809E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018096C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801809E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018096C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_after.c b/src/ov_SC03_110/ov_SC03_110_after.c index 896979e82..b71ae0a37 100644 --- a/src/ov_SC03_110/ov_SC03_110_after.c +++ b/src/ov_SC03_110/ov_SC03_110_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184408[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern ImgRect8 D_8018438C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184408[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018438C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_after.c b/src/ov_SC03_111/ov_SC03_111_after.c index e67a8da2f..03e60241a 100644 --- a/src/ov_SC03_111/ov_SC03_111_after.c +++ b/src/ov_SC03_111/ov_SC03_111_after.c @@ -3717,7 +3717,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186FBC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80186F40; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186FBC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80186F40); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_after.c b/src/ov_SC03_112/ov_SC03_112_after.c index a4e1e3f7d..bbee65654 100644 --- a/src/ov_SC03_112/ov_SC03_112_after.c +++ b/src/ov_SC03_112/ov_SC03_112_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187DC4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187D48; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187DC4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187D48); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_after.c b/src/ov_SC03_113/ov_SC03_113_after.c index ec2974f37..b3b1a76e2 100644 --- a/src/ov_SC03_113/ov_SC03_113_after.c +++ b/src/ov_SC03_113/ov_SC03_113_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185474[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char D_801853F8[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185474[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801853F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_after.c b/src/ov_SC03_114/ov_SC03_114_after.c index a3c96d65d..7d55bccd4 100644 --- a/src/ov_SC03_114/ov_SC03_114_after.c +++ b/src/ov_SC03_114/ov_SC03_114_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801810DC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80181060; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801810DC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181060); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_after.c b/src/ov_SC03_115/ov_SC03_115_after.c index 749018797..c66cf230f 100644 --- a/src/ov_SC03_115/ov_SC03_115_after.c +++ b/src/ov_SC03_115/ov_SC03_115_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182B48[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern ImgRect8 D_80182ACC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182B48[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182ACC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_after.c b/src/ov_SC03_116/ov_SC03_116_after.c index 592867f3c..65ac726cf 100644 --- a/src/ov_SC03_116/ov_SC03_116_after.c +++ b/src/ov_SC03_116/ov_SC03_116_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184F4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80184ED0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184F4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184ED0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_after.c b/src/ov_SC03_117/ov_SC03_117_after.c index 25e0f4c9e..52b7f084a 100644 --- a/src/ov_SC03_117/ov_SC03_117_after.c +++ b/src/ov_SC03_117/ov_SC03_117_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186F58[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 *D_80186EDC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186F58[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186EDC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_after.c b/src/ov_SC03_118/ov_SC03_118_after.c index ce502ad0f..df3d4086d 100644 --- a/src/ov_SC03_118/ov_SC03_118_after.c +++ b/src/ov_SC03_118/ov_SC03_118_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C004[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018BF88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_after.c b/src/ov_SC03_119/ov_SC03_119_after.c index 1cd4f96fe..74e452e76 100644 --- a/src/ov_SC03_119/ov_SC03_119_after.c +++ b/src/ov_SC03_119/ov_SC03_119_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C004[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018BF88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_after.c b/src/ov_SC03_121/ov_SC03_121_after.c index 041a89bae..59b563d1c 100644 --- a/src/ov_SC03_121/ov_SC03_121_after.c +++ b/src/ov_SC03_121/ov_SC03_121_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184820[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801847A4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184820[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801847A4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_after.c b/src/ov_SC03_124/ov_SC03_124_after.c index e0378465b..06bc5bfa4 100644 --- a/src/ov_SC03_124/ov_SC03_124_after.c +++ b/src/ov_SC03_124/ov_SC03_124_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D24C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D1D0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D24C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D1D0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_after.c b/src/ov_SC03_125/ov_SC03_125_after.c index 5f61e3e52..976704aa7 100644 --- a/src/ov_SC03_125/ov_SC03_125_after.c +++ b/src/ov_SC03_125/ov_SC03_125_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018641C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_801863A0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018641C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801863A0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_after.c b/src/ov_SC03_126/ov_SC03_126_after.c index 48a432d75..77962e854 100644 --- a/src/ov_SC03_126/ov_SC03_126_after.c +++ b/src/ov_SC03_126/ov_SC03_126_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_after.c b/src/ov_SC04_000/ov_SC04_000_after.c index 41318d95d..05ba2665b 100644 --- a/src/ov_SC04_000/ov_SC04_000_after.c +++ b/src/ov_SC04_000/ov_SC04_000_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185920[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801858A4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185920[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801858A4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_after.c b/src/ov_SC04_002/ov_SC04_002_after.c index 929ce805c..8679bd831 100644 --- a/src/ov_SC04_002/ov_SC04_002_after.c +++ b/src/ov_SC04_002/ov_SC04_002_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018AA8C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018AA10; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AA10); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_after.c b/src/ov_SC04_003/ov_SC04_003_after.c index ae00b9214..12cc21ea0 100644 --- a/src/ov_SC04_003/ov_SC04_003_after.c +++ b/src/ov_SC04_003/ov_SC04_003_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184828[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801847AC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184828[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801847AC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_after.c b/src/ov_SC04_004/ov_SC04_004_after.c index 88afddc26..01253ac9e 100644 --- a/src/ov_SC04_004/ov_SC04_004_after.c +++ b/src/ov_SC04_004/ov_SC04_004_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186D5C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80186CE0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186D5C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186CE0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_after.c b/src/ov_SC04_005/ov_SC04_005_after.c index e4c7f75b8..b82c2f1ae 100644 --- a/src/ov_SC04_005/ov_SC04_005_after.c +++ b/src/ov_SC04_005/ov_SC04_005_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018A190[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018A114; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018A190[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A114)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_after.c b/src/ov_SC04_006/ov_SC04_006_after.c index df6b531d9..75edb7f3b 100644 --- a/src/ov_SC04_006/ov_SC04_006_after.c +++ b/src/ov_SC04_006/ov_SC04_006_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182270[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_801821F4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182270[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801821F4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_after.c b/src/ov_SC04_007/ov_SC04_007_after.c index 3263e360f..631add2b7 100644 --- a/src/ov_SC04_007/ov_SC04_007_after.c +++ b/src/ov_SC04_007/ov_SC04_007_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188228[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_801881AC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188228[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801881AC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_after.c b/src/ov_SC04_009/ov_SC04_009_after.c index 36b269b9e..f69dd206a 100644 --- a/src/ov_SC04_009/ov_SC04_009_after.c +++ b/src/ov_SC04_009/ov_SC04_009_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018118C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80181110[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018118C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181110)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_after.c b/src/ov_SC04_010/ov_SC04_010_after.c index c50cc631f..5d8139151 100644 --- a/src/ov_SC04_010/ov_SC04_010_after.c +++ b/src/ov_SC04_010/ov_SC04_010_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180838[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_801807BC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180838[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801807BC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_after.c b/src/ov_SC04_011/ov_SC04_011_after.c index ef8e4c640..73a1a635f 100644 --- a/src/ov_SC04_011/ov_SC04_011_after.c +++ b/src/ov_SC04_011/ov_SC04_011_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80192AC8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80192A4C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80192AC8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192A4C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_after.c b/src/ov_SC04_012/ov_SC04_012_after.c index 6e86b0cbb..ef9a5a262 100644 --- a/src/ov_SC04_012/ov_SC04_012_after.c +++ b/src/ov_SC04_012/ov_SC04_012_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180C9C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80180C20[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180C9C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80180C20)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_after.c b/src/ov_SC04_015/ov_SC04_015_after.c index 2f3487ab0..25fc0db7b 100644 --- a/src/ov_SC04_015/ov_SC04_015_after.c +++ b/src/ov_SC04_015/ov_SC04_015_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186BD4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char *D_80186B58; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186BD4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186B58)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_after.c b/src/ov_SC04_016/ov_SC04_016_after.c index 9c6a1e845..ec89b1084 100644 --- a/src/ov_SC04_016/ov_SC04_016_after.c +++ b/src/ov_SC04_016/ov_SC04_016_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182698[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_8018261C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182698[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018261C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_after.c b/src/ov_SC04_018/ov_SC04_018_after.c index 736fee841..b3cfe6d26 100644 --- a/src/ov_SC04_018/ov_SC04_018_after.c +++ b/src/ov_SC04_018/ov_SC04_018_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F8B0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018F834; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_after.c b/src/ov_SC04_019/ov_SC04_019_after.c index 619f1c197..f8b6763dc 100644 --- a/src/ov_SC04_019/ov_SC04_019_after.c +++ b/src/ov_SC04_019/ov_SC04_019_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F8B0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018F834; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_after.c b/src/ov_SC04_020/ov_SC04_020_after.c index 9392a68e5..f40d31473 100644 --- a/src/ov_SC04_020/ov_SC04_020_after.c +++ b/src/ov_SC04_020/ov_SC04_020_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801859E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_8018596C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801859E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018596C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_after.c b/src/ov_SC04_021/ov_SC04_021_after.c index d068ae2ca..47502f858 100644 --- a/src/ov_SC04_021/ov_SC04_021_after.c +++ b/src/ov_SC04_021/ov_SC04_021_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_after.c b/src/ov_SC05_000/ov_SC05_000_after.c index 6f79212a6..dfa133d27 100644 --- a/src/ov_SC05_000/ov_SC05_000_after.c +++ b/src/ov_SC05_000/ov_SC05_000_after.c @@ -3605,7 +3605,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180928[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801808AC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180928[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801808AC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_after.c b/src/ov_SC05_001/ov_SC05_001_after.c index abf14ebb2..c1fa69060 100644 --- a/src/ov_SC05_001/ov_SC05_001_after.c +++ b/src/ov_SC05_001/ov_SC05_001_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188104[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 * D_80188088; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188104[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188088)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_after.c b/src/ov_SC05_002/ov_SC05_002_after.c index 9e5f38612..7159297a0 100644 --- a/src/ov_SC05_002/ov_SC05_002_after.c +++ b/src/ov_SC05_002/ov_SC05_002_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801828C4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80182848[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801828C4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182848)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_after.c b/src/ov_SC05_003/ov_SC05_003_after.c index 38ccb6d38..787120c65 100644 --- a/src/ov_SC05_003/ov_SC05_003_after.c +++ b/src/ov_SC05_003/ov_SC05_003_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184BFC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80184B80; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184BFC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184B80)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_after.c b/src/ov_SC05_004/ov_SC05_004_after.c index 89fc7c8be..4f241c9f2 100644 --- a/src/ov_SC05_004/ov_SC05_004_after.c +++ b/src/ov_SC05_004/ov_SC05_004_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183D08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80183C8C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183D08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183C8C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_after.c b/src/ov_SC05_005/ov_SC05_005_after.c index e15c2f6a5..1a66ec5d8 100644 --- a/src/ov_SC05_005/ov_SC05_005_after.c +++ b/src/ov_SC05_005/ov_SC05_005_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184ADC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 * D_80184A60; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184ADC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184A60)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_after.c b/src/ov_SC05_006/ov_SC05_006_after.c index 5e7a188f3..43c362177 100644 --- a/src/ov_SC05_006/ov_SC05_006_after.c +++ b/src/ov_SC05_006/ov_SC05_006_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181AFC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80181A80; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181AFC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181A80); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_after.c b/src/ov_SC05_007/ov_SC05_007_after.c index b32b2b167..a45495a36 100644 --- a/src/ov_SC05_007/ov_SC05_007_after.c +++ b/src/ov_SC05_007/ov_SC05_007_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801830F8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018307C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801830F8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018307C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_after.c b/src/ov_SC05_008/ov_SC05_008_after.c index 1f1217892..f6ef9be1f 100644 --- a/src/ov_SC05_008/ov_SC05_008_after.c +++ b/src/ov_SC05_008/ov_SC05_008_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185050[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80184FD4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185050[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184FD4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_after.c b/src/ov_SC05_010/ov_SC05_010_after.c index 29cd46481..054508c0e 100644 --- a/src/ov_SC05_010/ov_SC05_010_after.c +++ b/src/ov_SC05_010/ov_SC05_010_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018B03C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018AFC0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018B03C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AFC0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_after.c b/src/ov_SC05_011/ov_SC05_011_after.c index c6e18810b..b01ab85f5 100644 --- a/src/ov_SC05_011/ov_SC05_011_after.c +++ b/src/ov_SC05_011/ov_SC05_011_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801803B4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180338; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801803B4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180338); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_after.c b/src/ov_SC05_017/ov_SC05_017_after.c index 46a9c7305..c3a8bcbcd 100644 --- a/src/ov_SC05_017/ov_SC05_017_after.c +++ b/src/ov_SC05_017/ov_SC05_017_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F874[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018F7F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F874[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F7F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_after.c b/src/ov_SC05_018/ov_SC05_018_after.c index 6f6ecbef8..f435cf158 100644 --- a/src/ov_SC05_018/ov_SC05_018_after.c +++ b/src/ov_SC05_018/ov_SC05_018_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188FD0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80188F54; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188FD0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80188F54); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_after.c b/src/ov_SC05_019/ov_SC05_019_after.c index 494b90572..1b5733f96 100644 --- a/src/ov_SC05_019/ov_SC05_019_after.c +++ b/src/ov_SC05_019/ov_SC05_019_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_after.c b/src/ov_SC06_000/ov_SC06_000_after.c index 1751c9688..f71fe6233 100644 --- a/src/ov_SC06_000/ov_SC06_000_after.c +++ b/src/ov_SC06_000/ov_SC06_000_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018A924[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018A8A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018A924[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A8A8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_after.c b/src/ov_SC06_006/ov_SC06_006_after.c index 9fcdc46c2..502a5970b 100644 --- a/src/ov_SC06_006/ov_SC06_006_after.c +++ b/src/ov_SC06_006/ov_SC06_006_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184448[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801843CC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184448[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801843CC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_after.c b/src/ov_SC06_008/ov_SC06_008_after.c index 61c26b068..892279f2c 100644 --- a/src/ov_SC06_008/ov_SC06_008_after.c +++ b/src/ov_SC06_008/ov_SC06_008_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187EB0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_80187E34; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187EB0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187E34)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_after.c b/src/ov_SC06_010/ov_SC06_010_after.c index 442b59897..b10fb4898 100644 --- a/src/ov_SC06_010/ov_SC06_010_after.c +++ b/src/ov_SC06_010/ov_SC06_010_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018908C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80189010; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018908C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189010); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_after.c b/src/ov_SC06_011/ov_SC06_011_after.c index 678d5ab14..3d07ca833 100644 --- a/src/ov_SC06_011/ov_SC06_011_after.c +++ b/src/ov_SC06_011/ov_SC06_011_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182AEC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80182A70; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182AEC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182A70); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_after.c b/src/ov_SC06_013/ov_SC06_013_after.c index f7e1dbb69..bfefbd74d 100644 --- a/src/ov_SC06_013/ov_SC06_013_after.c +++ b/src/ov_SC06_013/ov_SC06_013_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181268[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char D_801811EC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181268[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801811EC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_after.c b/src/ov_SC06_014/ov_SC06_014_after.c index 37f75aa94..202bd8109 100644 --- a/src/ov_SC06_014/ov_SC06_014_after.c +++ b/src/ov_SC06_014/ov_SC06_014_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801825CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80182550; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801825CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182550); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_after.c b/src/ov_SC06_015/ov_SC06_015_after.c index bda30fcf3..42f9dc671 100644 --- a/src/ov_SC06_015/ov_SC06_015_after.c +++ b/src/ov_SC06_015/ov_SC06_015_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181124[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801810A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181124[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801810A8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_after.c b/src/ov_SC06_016/ov_SC06_016_after.c index 0c0717ee6..97870fb1d 100644 --- a/src/ov_SC06_016/ov_SC06_016_after.c +++ b/src/ov_SC06_016/ov_SC06_016_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187534[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801874B8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187534[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801874B8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_after.c b/src/ov_SC06_018/ov_SC06_018_after.c index 7ca59416a..3fc53b6db 100644 --- a/src/ov_SC06_018/ov_SC06_018_after.c +++ b/src/ov_SC06_018/ov_SC06_018_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80195C70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80195BF4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80195C70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80195BF4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_after.c b/src/ov_SC06_020/ov_SC06_020_after.c index a1c9fb265..9a3172a58 100644 --- a/src/ov_SC06_020/ov_SC06_020_after.c +++ b/src/ov_SC06_020/ov_SC06_020_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801876F8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018767C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801876F8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018767C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_after.c b/src/ov_SC06_022/ov_SC06_022_after.c index efb51d835..a6f8a9ee8 100644 --- a/src/ov_SC06_022/ov_SC06_022_after.c +++ b/src/ov_SC06_022/ov_SC06_022_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F9B4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018F938; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018F938); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_after.c b/src/ov_SC06_024/ov_SC06_024_after.c index c238fa167..5edacddee 100644 --- a/src/ov_SC06_024/ov_SC06_024_after.c +++ b/src/ov_SC06_024/ov_SC06_024_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80191E8C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80191E10; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80191E8C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80191E10); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_after.c b/src/ov_SC06_025/ov_SC06_025_after.c index 19a4b4115..48abddc8d 100644 --- a/src/ov_SC06_025/ov_SC06_025_after.c +++ b/src/ov_SC06_025/ov_SC06_025_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187330[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801872B4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187330[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801872B4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_after.c b/src/ov_SC06_027/ov_SC06_027_after.c index 31aef7ef8..e14f74468 100644 --- a/src/ov_SC06_027/ov_SC06_027_after.c +++ b/src/ov_SC06_027/ov_SC06_027_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180670[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_801805F4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180670[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801805F4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_after.c b/src/ov_SC06_029/ov_SC06_029_after.c index a51036b7d..1694545cf 100644 --- a/src/ov_SC06_029/ov_SC06_029_after.c +++ b/src/ov_SC06_029/ov_SC06_029_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EC04[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_8018EB88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EC04[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EB88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_after.c b/src/ov_SC06_030/ov_SC06_030_after.c index 48085ffb6..0c608001c 100644 --- a/src/ov_SC06_030/ov_SC06_030_after.c +++ b/src/ov_SC06_030/ov_SC06_030_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801844F4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80184478; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801844F4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184478)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_after.c b/src/ov_SC06_032/ov_SC06_032_after.c index 21312d782..241d54f3a 100644 --- a/src/ov_SC06_032/ov_SC06_032_after.c +++ b/src/ov_SC06_032/ov_SC06_032_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801959C0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80195944[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801959C0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80195944)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_after.c b/src/ov_SC06_033/ov_SC06_033_after.c index be24aec4e..63ccd9f66 100644 --- a/src/ov_SC06_033/ov_SC06_033_after.c +++ b/src/ov_SC06_033/ov_SC06_033_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80193ED0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80193E54; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80193ED0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80193E54); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_after.c b/src/ov_SC07_000/ov_SC07_000_after.c index ca2c7d719..ec08606c6 100644 --- a/src/ov_SC07_000/ov_SC07_000_after.c +++ b/src/ov_SC07_000/ov_SC07_000_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184D18[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80184C9C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184D18[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184C9C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_after.c b/src/ov_SC07_001/ov_SC07_001_after.c index f10a754e8..5a5a227cb 100644 --- a/src/ov_SC07_001/ov_SC07_001_after.c +++ b/src/ov_SC07_001/ov_SC07_001_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183BC8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80183B4C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183BC8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183B4C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_after.c b/src/ov_SC07_002/ov_SC07_002_after.c index 0d160c559..c0cb91d11 100644 --- a/src/ov_SC07_002/ov_SC07_002_after.c +++ b/src/ov_SC07_002/ov_SC07_002_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188E84[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80188E08; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188E84[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E08)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008_after.c b/src/ov_SC07_008/ov_SC07_008_after.c index 3cb73cee9..bccf43fc3 100644 --- a/src/ov_SC07_008/ov_SC07_008_after.c +++ b/src/ov_SC07_008/ov_SC07_008_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8017F99C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8017F920; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8017F99C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8017F920)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_after.c b/src/ov_SC07_009/ov_SC07_009_after.c index 25d00e895..fb1affa43 100644 --- a/src/ov_SC07_009/ov_SC07_009_after.c +++ b/src/ov_SC07_009/ov_SC07_009_after.c @@ -3611,7 +3611,279 @@ LAB_8015a390: } -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_8015A3C8); +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180440[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801803C4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180440[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801803C4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */